安卓传感器开发_android传感器开发

安卓传感器开发_android传感器开发昨天利用Vibrator将手机改造成振动器,女票大人很满意,今天再接再厉,研究一下Android传感器如何开发……主要涉及到三个类,Sensor,SensorManager,SensorEventListener。看名字就知道大概意思了,Sensor传感器,SensorManager传感器管理者,SensorEventListener传感器事件监听。SensorManager开发者文档给的类简

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

昨天利用Vibrator将手机改造成振动器,女票大人很满意,今天再接再厉,研究一下Android传感器如何开发……

主要涉及到三个类,Sensor, SensorManager, SensorEventListener。看名字就知道大概意思了,Sensor传感器,SensorManager传感器管理者, SensorEventListener传感器事件监听。

SensorManager开发者文档给的类简介,是这么介绍的:

SensorManager lets you access the device’s sensors. Get an instance
of this class by calling Context.getSystemService() with the argument SENSOR_SERVICE.
Always make sure to disable sensors you don’t need, especially when
your activity is paused. Failing to do so can drain the battery in
just a few hours. Note that the system will not disable sensors
automatically when the screen turns off.
说了一点注意事项,就是当不需要的时候,一定要确保禁用传感器了,否则电量会快速耗尽

但是也有一个传感器是例外:Trigger Sensor。不深究,看名字猜一下,应该是不能禁用触摸传感器。

开发者文档的例子很好,拷贝过来讲解。

public class SensorActivity extends Activity, implements SensorEventListener { 
   
                //SensorEventListener是接口类,必须实现它的方法
     private final SensorManager mSensorManager;
     private final Sensor mAccelerometer;

     public SensorActivity() {
         mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
         mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
                     //指定特定的传感器
     }

     protected void onResume() {
         super.onResume();
         mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);//在onResume()方法中调用SensorManager的registerListener()方法,为指定的传感器注册监听器。
     }

     protected void onPause() {
         super.onPause();
         mSensorManager.unregisterListener(this);
     }

    //这是接口类SensorEventListener必须实现的方法
     public void onAccuracyChanged(Sensor sensor, int accuracy) {
     }

     public void onSensorChanged(SensorEvent event) {
     }
 }

由该例子可知开发传感器应用的大致步骤:
1. 调用Context的getSystemService(SENSOR_SERVICE)方法来获取SensorManager对象
2. 调用SensorManager的getDefaultSensor( )方法来获取指定类型的传感器
3.在Activity的onResume()方法中调用SensorManager的registerListener()方法,为指定的传感器注册监听器,程序通过实现监听器即可获取传感器传回来的数据。

registerListener()方法有三个参数,分别如下:

istener A SensorEventListener object.
sensor The Sensor to registerto.
samplingPeriodUs 获取数据的频率

最后实现一个例子,该例子可在《疯狂的Android讲义》P622中找到。

public class MainActivity extends Activity implements SensorEventListener { 
   
    //定义系统的Sensor管理器
    SensorManager sensorManager;
    EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获取程序界面上的文本框组件
        editText = (EditText) findViewById(R.id.text);

        //获取系统的传感器管理服务
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    }

    @Override
    protected void onResume(){
        super.onResume();
        //为系统的加速度传感器注册监听器
        sensorManager.registerListener(this,
                                        sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                                        SensorManager.SENSOR_DELAY_GAME);
    }

    @Override
    protected void onStop(){
        //取消注册
        sensorManager.unregisterListener(this);
        super.onStop();
    }

    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
        float[] values = sensorEvent.values;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("X方向上的加速度:");
        stringBuilder.append(values[0]);
        stringBuilder.append("\nY方向上的加速度:");
        stringBuilder.append(values[1]);
        stringBuilder.append("\nZ方向上的加速度:");
        stringBuilder.append(values[2]);
        editText.setText(stringBuilder.toString());
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {

    }
}

照着书码完之后,发现一个很有意思的事情,就是不一定非要在Activity的onResume()方法中注册。如果是这样的话,那就可以开开脑洞了….假如在Service中注册SensorEventListener,当加速度超过某个值,则在后台播放音乐。这样跑步时就可以听着音乐控制自己的部分了。蛮好玩的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187832.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • css3颜色渐变_灰色渐变图片

    css3颜色渐变_灰色渐变图片Document*{margin:0;padding:0}.words{font-size:25px;font-weight:700;text-align:center;margin:20px0}div{width:300px;height:150px;margin:0auto10px;border:1pxsolid#ddd;}.box1{background:-webkit-linea…

    2025年7月20日
    4
  • SWOT分析和PEST分析[通俗易懂]

    SWOT分析和PEST分析[通俗易懂]1.SWOT分析定义:SWOT(StrengthsWeaknessOpportunityThreats)分析法,又称态势分析法或优劣势分析法,用来确定企业自身的竞争优势(strength)、竞争劣势(weakness)、机会(opportunity)和威胁(threat),从而将公司的战略与公司内部资源、外部环境有机地结合起来。如何用:首先要明白使用SWOT的目的,为什么要用它,用它的目的

    2022年6月14日
    64
  • java浅拷贝和深拷贝的区别_python的浅拷贝和深拷贝

    java浅拷贝和深拷贝的区别_python的浅拷贝和深拷贝Java中的对象拷贝(ObjectCopy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去。举例说明:比如,对象A和对象B都属于类S,具有属性a和b。那么对对象A进行拷贝操作赋值给对象B就是:B.a=A.a;B.b=A.b;在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用现有对象的部分或全部数据。Java中的对象拷贝主要分为:浅拷贝(ShallowCopy)、深拷贝(DeepCopy)。先介绍一点铺垫知识:Java中的数据类型分为基本数据类型和.

    2022年9月1日
    5
  • idea2021永久激活码【2021.7最新】

    (idea2021永久激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html65MJGLILER-eyJsaWNlbnNlSWQi…

    2022年3月22日
    51
  • 盈通rx580游戏高手 bios_警告!盈通RX580 2048SP疑似采用二手显存颗粒

    盈通rx580游戏高手 bios_警告!盈通RX580 2048SP疑似采用二手显存颗粒今天我刷新闻,正好看到了超能网的一篇关于盈通RX5802048SP游戏高手OC的评测,但是看到显存颗粒的时候顿时起了疑心:链接:https://www.expreview.com/68378.html显存颗粒高清图:第一行编号:6EA47,按照美光颗粒打标定义6E代表16年第10周(美光官方定义,中文来自谷歌翻译)首先RX5802048SP是在18年下半年才出…

    2022年6月22日
    31
  • 查看android证书签名

    查看android证书签名虽然以前搞过,一直忘了怎么查看android证书签名。最近因为需要查看android证书签名,在网上找了很多都不是印象中的方法,最后看到一篇搜索才想起,看来以后要多提高搜索技巧,好记性不如好笔记。正题—-其实查看android签名很简单,对于签过名的apk文件中,用winrar打开后在在META-INF文件下的cert.rsa属于pkcs7证书文件,所以加改后缀为.p7b打开,在

    2022年6月8日
    93

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号