一些實(shí)驗(yàn)過(guò)程中的疑問(wèn):
如何知道設(shè)備上有哪些傳感器?
如果手機(jī)不支持的傳感器,程序運(yùn)行往往不會(huì)拋出異常,只是無(wú)法獲得傳感器傳回的數(shù)據(jù)。那么如何知道設(shè)備上有哪些傳感器可用呢?有兩種方式,一種是直接方式,一種是間接方式。直接方式就是遍歷獲取得到傳感器信息集合。間接方式則是通過(guò)在AndroidManifest.xml配置文件中,指定該應(yīng)用程序只支持運(yùn)行在具有哪些硬件功能的設(shè)備上。如果應(yīng)用程序需要溫度傳感器,可以在配置文件中添加下面一行代碼:
??????? <uses-feature android:name="android.hardware.sensor.temperature"
???????????????????????????? android:required="true"/>
??????? Android Market只將應(yīng)用程序安裝在有溫度傳感器的設(shè)備上。但是該規(guī)則并不適用于其他Android應(yīng)用商店。也就是說(shuō),一些Android應(yīng)用商店不會(huì)執(zhí)行檢測(cè)以確保應(yīng)用程序安裝在支持指定傳感器的設(shè)備上
import android.support.v7.app.AppCompatActivity;?????? 報(bào)錯(cuò)
去Google android研發(fā)網(wǎng)站查找到了關(guān)于Android X的解釋:
??? AndroidX 對(duì)原始 Android 支持庫(kù)進(jìn)行了重大改進(jìn),后者現(xiàn)在已不再維護(hù)。
??? androidx 軟件包完全取代了支持庫(kù),不僅提供同等的功能,而且提供了新的庫(kù)。
??? 此外,AndroidX 還包括以下功能:
??? AndroidX 中的所有軟件包都使用一致的命名空間,以字符串 androidx 開(kāi)頭。支持庫(kù)軟件包已映射到對(duì)應(yīng)的 androidx.* 軟件包。有關(guān)所有舊類到新類以及舊構(gòu)建工件到新構(gòu)建工件的完整映射,請(qǐng)參閱軟件包重構(gòu)頁(yè)面。
??? 與支持庫(kù)不同,androidx 軟件包會(huì)單獨(dú)維護(hù)和更新。從版本 1.0.0 開(kāi)始,androidx 軟件包使用嚴(yán)格的語(yǔ)義版本控制。您可以單獨(dú)更新項(xiàng)目中的各個(gè) AndroidX 庫(kù)。
??? 版本 28.0.0 是支持庫(kù)的最后一個(gè)版本。我們將不再發(fā)布 android.support 庫(kù)版本。所有新功能都將在 androidx 命名空間中開(kāi)發(fā)。
??? 怎么使用Android X呢?
例如:
把原先的
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
改為
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
就可以了
原先的很多都要去替換。包括在build.gradle、xml文件、java文件中。
手機(jī)沒(méi)有溫度傳感器怎么監(jiān)控溫度
其實(shí)在我們的手機(jī)中的元器件是十分微小緊密而又復(fù)雜的,光是一個(gè)CPU就是以nm級(jí)別的單位來(lái)研發(fā)制造的,而在手機(jī)的內(nèi)部也存在著許多熱敏元器件,其中就會(huì)在多個(gè)地方設(shè)置安裝熱敏電阻,以達(dá)到實(shí)時(shí)檢測(cè)手機(jī)某些特殊地方運(yùn)行溫度來(lái)進(jìn)行整體調(diào)度避免手機(jī)損壞的目的。而這些軟件就是通過(guò)這些熱敏電阻其中的參數(shù)值變化,將其轉(zhuǎn)化為手機(jī)上可以實(shí)時(shí)直觀看到的溫度的,所以即便是你的手機(jī)沒(méi)有專門(mén)的溫度檢測(cè)器,也能夠通過(guò)手機(jī)上都內(nèi)置的熱敏電阻來(lái)獲取溫度信息。
參考代碼:https://www.cnblogs.com/1138720556Gary/p/9279841.html
chuanganqi2.app(獲取手機(jī)傳感器列表)
MainActivity.java
public class MainActivity extends AppCompatActivity {
????private TextView tx1;
????@Override
????protected void onCreate(Bundle savedInstanceState) {
????????super.onCreate(savedInstanceState);
????????setContentView(R.layout.activity_main);
????????Button bt1 = findViewById(R.id.button);
????????tx1=findViewById(R.id.textView);
????????//從系統(tǒng)獲得傳感器管理器
????????final SensorManager sm = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
????????bt1.setOnClickListener(new View.OnClickListener() {
????????????@Override
????????????public void onClick(View v) {
????????????????String str;
????????????????//從傳感器管理器中獲得全部的傳感器列表
????????????????// 用TYPE_ALL參數(shù)調(diào)用getSensorList()方法,以獲取一個(gè)包含設(shè)備上所有傳感器的列表。
????????????????List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);
????????????????int i;
????????????????//給ViewText添加滾動(dòng)條
????????????????tx1.setMovementMethod(ScrollingMovementMethod.getInstance());
????????????????//顯示有多少個(gè)傳感器
????????????????tx1.setText("經(jīng)檢測(cè)該手機(jī)有"+allSensors.size()+"個(gè)傳感器,它們分別是:");
????????????????Sensor s;
????????????????//顯示每個(gè)傳感器的具體信息
????????????????for(i=0;i<allSensors.size();i++)
????????????????{
????????????????????s=allSensors.get(i);
????????????????????str="設(shè)備名稱:"+s.getName();
????????????????????switch(s.getType())
????????????????????{
????????????????????????//加速傳感器 ????Sensor.TYPE_ACCELEROMETER
????????????????????????case Sensor.TYPE_ACCELEROMETER:
????????????????????????????tx1.setText(tx1.getText()+"\n"+i+"加速傳感器accelerometer:\n"+str);
????????????????????????????break;
????????????????????????//陀螺儀傳感器 ???Sensor.TYPE_GYROSCOPE
????????????????????????case Sensor.TYPE_GYROSCOPE:
????????????????????????????tx1.setText(tx1.getText()+"\n"+i+"陀螺儀傳感器gyroscope:\n"+str);
????????????????????????????break;
????????????????????????//環(huán)境光儀傳感器 ??Sensor.TYPE_LIGHT
????????????????????????case Sensor.TYPE_LIGHT:
????????????????????????????tx1.setText(tx1.getText()+"\n"+i+"環(huán)境光儀傳感器light:\n"+str);
????????????????????????????break;
????????????????????????//電磁場(chǎng)傳感器 ???Sensor.TYPE_MAGNETIC_FIELD
????????????????????????case Sensor.TYPE_MAGNETIC_FIELD:
????????????????????????????tx1.setText(tx1.getText()+"\n"+i+"電磁場(chǎng)傳感器magnetic:\n"+str);
????????????????????????????break;
????????????????????????//方向傳感器 ???Sensor.TYPE_ORIENTATION:
????????????????????????case Sensor.TYPE_ORIENTATION:
????????????????????????????tx1.setText(tx1.getText()+"\n"+i+"方向傳感器orientation:\n"+str);
????????????????????????????break;
????????????????????????//壓力傳感器 ????Sensor.TYPE_PRESSURE:
????????????????????????case Sensor.TYPE_PRESSURE:
????????????????????????????tx1.setText(tx1.getText()+"\n"+i+"壓力傳感器pressure:\n"+str);
????????????????????????????break;
????????????????????????//距離傳感器 ????Sensor.TYPE_PROXIMITY:
????????????????????????case Sensor.TYPE_PROXIMITY:
????????????????????????????tx1.setText(tx1.getText()+"\n"+i+"距離傳感器proximity:\n"+str);
????????????????????????????break;
????????????????????????//溫度傳感器 ????Sensor.TYPE_TEMPERATURE:
????????????????????????case Sensor.TYPE_TEMPERATURE:
????????????????????????????tx1.setText(tx1.getText()+"\n"+i+"溫度傳感器temperature:\n"+str);
????????????????????????????break;
????????????????????????default:
????????????????????????????tx1.setText(tx1.getText()+"\n"+i+"未知傳感器:\n"+str);
????????????????????????????break;
????????????????????}
????????????????}
????????????}
????????});
????}
}
activity_main.xml
????<TextView
????????android:layout_width="fill_parent"
????????android:layout_height="wrap_content"
????????android:text="傳感器操作!"
????????android:textSize="10pt" />
????<Button
????????android:id="@+id/button"
????????android:layout_width="match_parent"
????????android:layout_height="wrap_content"
????????android:text="獲取手機(jī)傳感器信息"/>
????<TextView
????????android:id="@+id/textView"
????????android:scrollbars="vertical"
????????android:layout_width="fill_parent"
????????android:layout_height="fill_parent"
????????android:textSize="8pt"/>
</LinearLayout>
Jiasuqi.app(獲取手機(jī)加速度)
MainActivity.java
public class MainActivity extends AppCompatActivity implements SensorEventListener,View.OnClickListener {
//要監(jiān)控傳感器的原始數(shù)據(jù),你需要實(shí)現(xiàn)SensorEventListener接口
????private SensorManager mSensorMgr;
????private ?TextView tvx;
????private ?TextView tvy;
????private ?TextView tvz;
????@Override
????protected void onCreate(Bundle savedInstanceState) {
????????super.onCreate(savedInstanceState);
????????setContentView(R.layout.activity_main);
????????Button bt=findViewById(R.id.bt_dsp);
????????bt.setOnClickListener(this);
????????Button bt_stop=findViewById(R.id.bt_stop);
????????bt_stop.setOnClickListener(this);
????????tvx=findViewById(R.id.tvx);
????????tvy=findViewById(R.id.tvy);
????????tvz=findViewById(R.id.tvz);
????????//要識(shí)別設(shè)備上的傳感器,你首先需要獲取一個(gè)傳感器設(shè)備的引用。
????????// 你可以通過(guò)調(diào)用getSystemService(),并傳入SENSOR_SERVICE參數(shù),來(lái)創(chuàng)建一個(gè)SensorManage
????????mSensorMgr=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
????}
//使用了onResume()和onPause()回調(diào)方法來(lái)注冊(cè)和注銷傳感器事件偵聽(tīng)器
????protected void onPause()
????{
????????super.onPause();
????????mSensorMgr.unregisterListener(this);
????}
????protected void onResume()
????{
????????super.onResume();
????}
????protected void onStop()
????{
????????super.onStop();
????????mSensorMgr.unregisterListener(this);
????}
????//要監(jiān)控傳感器的原始數(shù)據(jù),你需要實(shí)現(xiàn)SensorEventListener接口的onSensorChanged()回調(diào)方法
????//l傳感器報(bào)送一個(gè)新數(shù)據(jù)
????//這種情況下,系統(tǒng)會(huì)調(diào)用onSensorChanged()方法,并傳給你一個(gè)SensorEvent對(duì)象TYPE_ACCELEROMETER。
????// SensorEvent對(duì)象中包含了新數(shù)據(jù)的相關(guān)信息
????public void onSensorChanged(SensorEvent event)
????{
????????if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER)
????????{
????????????float[] values=event.values;
????????????tvx.setText("X方向的加速度: "+Float.toString(values[0]));
????????????tvy.setText("Y方向的加速度: "+Float.toString(values[1]));
????????????tvz.setText("Z方向的加速度: "+Float.toString(values[2]));
????????}
????}
????//要監(jiān)控傳感器的原始數(shù)據(jù),你需要實(shí)現(xiàn)SensorEventListener接口的onAccuracyChanged()回調(diào)辦法
????public void onAccuracyChanged(Sensor sensor,int accuracy)
????{//不用處理,空著就行
????????return;
????}
????public void onClick(View v)
????{
????????if(v.getId()==R.id.bt_dsp)
????????{
????????????mSensorMgr.unregisterListener(this,mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));
????????????mSensorMgr.registerListener(this,
????????????????????//用某類型常量作為參數(shù)的getDefaultSensor()來(lái)檢測(cè)設(shè)備上是否存在該類型的傳感器
????????????????????mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
????????????????????SensorManager.SENSOR_DELAY_NORMAL);
????????????return;
????????}
????????if(v.getId()==R.id.bt_stop)
????????{
????????????mSensorMgr.unregisterListener(this);
????????????return;
????????}
????}
}
activity_main.xml
????<TextView
????????android:id="@+id/tvx"
????????android:layout_width="214dp"
????????android:layout_height="69dp"
????????android:text="TextView"
????????tools:layout_editor_absoluteX="117dp"
????????tools:layout_editor_absoluteY="100dp" />
????<TextView
????????android:id="@+id/tvy"
????????android:layout_width="214dp"
????????android:layout_height="53dp"
????????android:text="TextView"
????????tools:layout_editor_absoluteX="126dp"
????????tools:layout_editor_absoluteY="158dp" />
????<TextView
????????android:id="@+id/tvz"
????????android:layout_width="214dp"
????????android:layout_height="53dp"
????????android:text="TextView"
????????tools:layout_editor_absoluteX="130dp"
????????tools:layout_editor_absoluteY="234dp" />
????<Button
????????android:id="@+id/bt_dsp"
????????android:layout_width="131dp"
????????android:layout_height="79dp"
????????android:text="開(kāi)始顯示加速度"
????????tools:layout_editor_absoluteX="115dp"
????????tools:layout_editor_absoluteY="444dp" />
????<Button
????????android:id="@+id/bt_stop"
????????android:layout_width="217dp"
????????android:layout_height="81dp"
????????android:text="停止顯示加速度" />
</LinearLayout
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-786487.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-786487.html
到了這里,關(guān)于無(wú)線傳感器基礎(chǔ):獲取手機(jī)傳感器、加速度的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!