需要源碼請點贊關注收藏后評論區(qū)留言~~~
一、傳感器的種類
傳感器Sensor是一系列感應器的總稱,是Android設備用來感知周圍環(huán)境和運動信息的工具。 因為具體的感應信息依賴于相關硬件,所以雖然Android定義了眾多感應器,但是并非每部手機都能支持這么多感應器。 傳感器一般借助于硬件監(jiān)聽環(huán)境信息改變,有時會結合軟件監(jiān)聽用戶的運動信息。
傳感器常見的種類如下
Sensor類的傳感器類型 |
傳感器名稱 |
說明 |
TYPE_ACCELEROMETER |
加速度 |
常用于搖一搖功能 |
TYPE_MAGNETIC_FIELD |
磁場 |
|
TYPE_ORIENTATION |
方向 |
已棄用,取而代之的是getOrientation方法 |
TYPE_GYROSCOPE |
陀螺儀 |
用來感應手機的旋轉和傾斜 |
TYPE_LIGHT |
光線 |
用來感應手機正面的光線強弱 |
TYPE_PRESSURE |
壓力 |
用來感應氣壓 |
TYPE_PROXIMITY |
距離 |
|
TYPE_GRAVITY |
重力 |
|
TYPE_STEP_DETECTOR |
步行檢測 |
用戶每走一步就觸發(fā)一次事件 |
TYPE_STEP_COUNTER |
步行計數 |
記錄激活后的步伐數 |
?運行測試App如下? 每臺手機支持的傳感器功能可能不太一樣 讀者可自行測試
?代碼如下文章來源:http://www.zghlxwxcb.cn/news/detail-486065.html
package com.example.iot;
import android.annotation.SuppressLint;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SuppressLint("DefaultLocale")
public class SensorActivity extends AppCompatActivity {
private TextView tv_sensor; // 聲明一個文本視圖對象
private String[] mSensorType = {
"加速度", "磁場", "方向", "陀螺儀", "光線",
"壓力", "溫度", "距離", "重力", "線性加速度",
"旋轉矢量", "濕度", "環(huán)境溫度", "無標定磁場", "無標定旋轉矢量",
"未校準陀螺儀", "特殊動作", "步行檢測", "計步器", "地磁旋轉矢量",
"心跳速率", "傾斜檢測", "喚醒手勢", "掠過手勢", "拾起手勢",
"手腕傾斜", "設備方向", "六自由度姿態(tài)", "靜止檢測", "運動檢測",
"心跳檢測", "動態(tài)元事件", "未知", "低延遲離體檢測", "低延遲體外檢測"};
private Map<Integer, String> mapSensor = new HashMap<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sensor);
tv_sensor = findViewById(R.id.tv_sensor);
showSensorInfo(); // 顯示手機自帶的傳感器信息
}
// 顯示手機自帶的傳感器信息
private void showSensorInfo() {
// 從系統(tǒng)服務中獲取傳感管理器對象
SensorManager mSensorMgr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// 獲取當前設備支持的傳感器列表
List<Sensor> sensorList = mSensorMgr.getSensorList(Sensor.TYPE_ALL);
String show_content = "當前支持的傳感器包括:\n";
for (Sensor sensor : sensorList) {
if (sensor.getType() >= mSensorType.length) {
continue;
}
mapSensor.put(sensor.getType(), sensor.getName());
}
for (Map.Entry<Integer, String> map : mapSensor.entrySet()) {
int type = map.getKey();
String name = map.getValue();
String content = String.format("%d %s:%s\n", type, mSensorType[type - 1], name);
show_content += content;
}
tv_sensor.setText(show_content);
}
}
二、利用加速度傳感器實現搖一搖功能
加速度傳感器是最常見的感應器,大部分智能手機都內置了加速度傳感器。 加速度傳感器運用最廣泛的功能是微信的搖一搖,用戶通過搖晃手機尋找周圍的人。
搖一搖功能實現步驟如下
(1)聲明一個SensorManager對象。
(2)重寫Activity的onResume方法,在該方法中注冊傳感器監(jiān)聽事件。
(3)重寫Activity的onPause方法,在該方法中注銷傳感器事件。
(4)編寫一個傳感器事件監(jiān)聽器,該監(jiān)聽器繼承自SensorEventListener,并實現onSensorChanged和onAccuracyChanged兩個方法。
運行測試效果如下? 搖一下手機 達到系統(tǒng)設定的閾值之后就會顯示如下界面
?代碼如下
package com.example.iot;
import android.annotation.SuppressLint;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Vibrator;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.example.iot.util.DateUtil;
@SuppressLint("SetTextI18n")
public class AccelerationActivity extends AppCompatActivity implements SensorEventListener {
private TextView tv_shake; // 聲明一個文本視圖對象
private SensorManager mSensorMgr; // 聲明一個傳感管理器對象
private Vibrator mVibrator; // 聲明一個震動器對象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_acceleration);
tv_shake = findViewById(R.id.tv_shake);
// 從系統(tǒng)服務中獲取傳感管理器對象
mSensorMgr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// 從系統(tǒng)服務中獲取震動器對象
mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
}
@Override
protected void onPause() {
super.onPause();
mSensorMgr.unregisterListener(this); // 注銷當前活動的傳感監(jiān)聽器
}
@Override
protected void onResume() {
super.onResume();
// 給加速度傳感器注冊傳感監(jiān)聽器
mSensorMgr.registerListener(this,
mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { // 加速度變更事件
// values[0]:X軸,values[1]:Y軸,values[2]:Z軸
float[] values = event.values;
if ((Math.abs(values[0]) > 15 || Math.abs(values[1]) > 15
|| Math.abs(values[2]) > 15)) {
tv_shake.setText(DateUtil.getNowFullDateTime() + " 我看到你搖一搖啦");
mVibrator.vibrate(500); // 系統(tǒng)檢測到搖一搖事件后,震動手機提示用戶
}
}
}
// 當傳感器精度改變時回調該方法,一般無需處理
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
}
創(chuàng)作不易 覺得有幫助請點贊關注收藏~~~文章來源地址http://www.zghlxwxcb.cn/news/detail-486065.html
到了這里,關于【Android App】物聯網中查看手機支持的傳感器及實現搖一搖功能-加速度傳感器(附源碼和演示 超詳細)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!