编程列出手机内置传感器


传感器是第二代智能手机的重要标志之一,很多手机游戏和应用的某些功能依赖于传感器。android SDK 支持的传感器并不是每一部智能手机都全部支持,不同品牌,不同型号手机,内置的传感器皆有所不同。内置手机传感器可分为3类,分别是动作传感器,位置传感器,环境传感器。

android SDK 提供了Android Sensor Framework,可以用来访问当前设备的内置传感器。

我们需要重点了解这几个类:

<1>SensorManager

Android API:

SensorManager允许您访问设备的传感器。 调用这个类的一个实例Context.getSystemService(),参数为SENSOR_SERVICE。该类提供了很多访问和枚举传感器,注册、注销传感器监听器的方法,而且还提供了与传感器精度,扫描频率,校正有关常量。

总是确保禁用不需要的传感器,尤其是当你的活动暂停。 未能这样做,会在几个小时内很大程度消耗电池。 注意,屏幕关闭时,系统将会自动禁用传感器。

注意:不要使用这种机制触发传感器TriggerEventListenerTYPE_SIGNIFICANT_MOTION是一个触发传感器。

<2>Sensor

Android API:

代表一个传感器。 使用getSensorList(int)得到可用的传感器的列表。

getSensorList(int) 原型:

public List<Sensor> getSensorList (int type)

<3>

这个类代表一个传感器事件和持有信息如传感器的类型、时间戳、准确性和传感器的数据

使用的坐标系统的定义SensorEvent API。

定义的坐标系统是相对于屏幕的手机默认的方向。 轴不交换设备的屏幕取向的变化。

X轴是水平和指向右边,Y轴是垂直的点和Z轴指向外部的正面屏幕上。 在此系统中,坐标在屏幕后面有负Z值。

<4>SensorEventListener

用于从SensorManager时接收通知,传感器值已经改变了。

有两个回调函数

Public Methods

onAccuracyChanged( Sensor sensor, int accuracy)
Called when the accuracy of the registered sensor has changed.

onSensorChanged( SensorEvent event)
Called when sensor values have changed.


代码:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.shilixia.learnsensor.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="m3note传感器有:"
        android:id="@+id/tv_showSensors"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

MainActivity.java

package com.shilixia.learnsensor;

import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    private SensorManager sm;
    private TextView tv_showSensors;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_showSensors = (TextView) findViewById(R.id.tv_showSensors);
        sm = (SensorManager) getSystemService(SENSOR_SERVICE);
        List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ALL);
        //遍历枚举
       for (Sensor sensor :sensors){
            tv_showSensors.append(sensor.getName()+"\n");
        }

    }
}

结果如下:


有个小疑问,就是MPL  MTK 是什么意思,貌似没有找到确切说明。。。???


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值