zoukankan      html  css  js  c++  java
  • 如何判断android 手机支持哪些传感器

        最近接触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 上显示的结果如下:

  • 相关阅读:
    一个FLAG #03# 蛇形填数
    一个FLAG #02# 逆序输出
    一个FLAG #01# 重学C/C++以及算法
    MAVLink笔记 #01# 维基百科翻(译)
    编译原理 #04# 中缀表达式转化为四元式(JavaScript实现)
    Java开发:手机电话号码校验
    解决java poi循环遍历行getLastRowNum出现不准确的问题
    Redis的安装和简单测试
    JS解析xml字符串,并把xml展示在HTML页面上
    解决cxf+springmvc发布的webservice,缺少types,portType和message标签的问题
  • 原文地址:https://www.cnblogs.com/wangpg/p/2431933.html
Copyright © 2011-2022 走看看