如何判断android 手机支持哪些传感器

时间:2024-03-08 07:54:11

    最近接触android手机开发,觉得挺有意思的,由于之前做java开发好多年,所以对于android开发难度也不大。 但是毕竟是一个新的系统,还是有很多内容需要了解的。所以在网上找材料,刚好看到一个指南针的程序,觉得挺有意思的就搞了环境,写了一下,果然挺更有意思的,觉得 sensor 这个东西太有意思了,就开始研究这个,出于这个目的写了了一个用来检测你所持有的手机支持哪些传感器。

 

先来个图:

 

1.首先说明一下,android 定义的传感器有十几种,但是很多手机支持大概 8种。

传感器类: Sensor ,这个类定义了android传感器,其中包括传感器的特性描述和 定义了所有支持的传感器类型。

常量如下:

 

Constants
int TYPE_ACCELEROMETER A constant describing an accelerometer sensor type.
int TYPE_ALL A constant describing all sensor types.
int TYPE_AMBIENT_TEMPERATURE A constant describing an ambient temperature sensor type
int TYPE_GRAVITY A constant describing a gravity sensor type.
int TYPE_GYROSCOPE A constant describing a gyroscope sensor type
int TYPE_LIGHT A constant describing an light sensor type.
int TYPE_LINEAR_ACCELERATION A constant describing a linear acceleration sensor type.
int TYPE_MAGNETIC_FIELD A constant describing a magnetic field sensor type.
int TYPE_ORIENTATION This constant is deprecated. use SensorManager.getOrientation() instead.
int TYPE_PRESSURE A constant describing a pressure sensor type
int TYPE_PROXIMITY A constant describing an proximity sensor type.
int TYPE_RELATIVE_HUMIDITY A constant describing a relative humidity sensor type.
int TYPE_ROTATION_VECTOR A constant describing a rotation vector sensor type.
int TYPE_TEMPERATURE This constant is deprecated. use Sensor.TYPE_AMBIENT_TEMPERATURE instead.



方法如下:

Public Methods
float getMaximumRange()
int getMinDelay()
String getName()
float getPower()
float getResolution()
int getType()
String getVendor()
int getVersion()



2. 看到上面的内容就清晰了,获得传感器的特性的代码如下:

 

 1 package org.wpg.sensor.check;
2
3 import java.util.List;
4
5 import android.app.Activity;
6 import android.hardware.Sensor;
7 import android.hardware.SensorManager;
8 import android.os.Bundle;
9 import android.os.PowerManager;
10 import android.os.PowerManager.WakeLock;
11 import android.text.method.ScrollingMovementMethod;
12 import android.util.Log;
13 import android.widget.TextView;
14
15 public class CheckSensorActivity extends Activity {
16 WakeLock wakeLock;
17 @Override
18 public void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.main);
21
22 SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
23 List<Sensor> Sensorlist= sm.getSensorList(Sensor.TYPE_ALL);
24
25 PowerManager manager = ((PowerManager)getSystemService(POWER_SERVICE));
26 wakeLock = manager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK| PowerManager.ON_AFTER_RELEASE, "ATAAW");
27 wakeLock.acquire();
28
29 TextView tv = (TextView) findViewById(R.id.txt);
30 tv.setMovementMethod(ScrollingMovementMethod.getInstance());
31 tv.setText("");
32 String text ="";
33 text=" 你的手机总共拥有传感器的个数为:"+Sensorlist.size() +" 个 \n\n";
34 tv.append(text);
35 for (Sensor sensor : Sensorlist) {
36 Log.i("Sensor", sensor.getName()+sensor.getType());
37 text=" 名称: "+sensor.getName()+"\n 能量: "+sensor.getPower()+"\n 分辨率: "+ sensor.getResolution()
38 +"\n 厂商: "+sensor.getVendor()+"\n 版本: "+sensor.getVersion()+"\n 最小延时: "+sensor.getMinDelay()
39 +"\n 最大跨度: "+sensor.getMaximumRange()+"\n----------------------------------------------------\n";
40 tv.append(text);
41 }
42
43 }
44 }

Sensor的每个方法代表什么意思,看代码就应该很清楚,下面简单说明一下代码,大多数人应该“你懂得”

SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
List<Sensor> Sensorlist= sm.getSensorList(Sensor.TYPE_ALL);
上面的两行代码是获得 传感器服务 然后通过传感器管理类获得所有运行手机支持的传感器列表,也就是获得的Sensorlist里面包含的内容是根据手机的不同而不同的。
for (Sensor sensor : Sensorlist) {
Log.i("Sensor", sensor.getName()+sensor.getType());
text=" 名称: "+sensor.getName()+"\n 能量: "+sensor.getPower()+"\n 分辨率: "+ sensor.getResolution()
+"\n 厂商: "+sensor.getVendor()+"\n 版本: "+sensor.getVersion()+"\n 最小延时: "+sensor.getMinDelay()
+"\n 最大跨度: "+sensor.getMaximumRange()+"\n----------------------------------------------------\n";
tv.append(text);
}
这几行代码应该也很好看懂,就是循环获得所有的传感器信息。

程序在 HTC G12 上显示的结果如下: