Android 传感器开发(仿知乎摇一摇反馈问题功能)

最近用知乎的时候,偶然间发现摇一摇可以反馈问题,就想着做一个类似的功能,顺便梳理下关于sensor的知识。
先看看做出来的效果:

sample.gif

传感器中比较重要的几个类:
android.hardware.Sensor;
android.hardware.SensorEvent
android.hardware.SensorEventListener
okay,会这几个类就够用了,再记住一个回调方法,就能对付大多数的需求了

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

    }

    @Override
    public void onSensorChanged(SensorEvent event) {
     
    }

下面让我回顾下传感器的知识:

Android 中传感器有很多,当你打出[Sensor.]的时候就会看到下面这样

image.png

下面还有好多,如果想详细研究下所有传感器可以看看这里 直达链接

Android的三大类传感器

动作(Motion)传感器、环境(Environmental)传感器、位置(Position)传感器

1.动作传感器

加速(accelerometer)传感器、重力(gravity)传感器、陀螺仪(gyroscope)传感器、旋转向量(rotational vector )传感器

我们摇一摇功能主要用的就是动作传感器中的加速传感器,动作传感器里有一个很吊的图,只要动作传感器肯定涉及到坐标,下图形象的说明了这个坐标系。


在加速传感器中:实现我上方说的那个回调

 @Override
    public void onSensorChanged(SensorEvent event) {
         float[] values = event.values;
    }

其中这三个值就代表着X,Y,Z方向的值
values[0]: Acceleration minus Gx on the x-axis
values[1]: Acceleration minus Gy on the y-axis
values[2]: Acceleration minus Gz on the z-axis

2.环境传感器

湿度(barometer)传感器、光线(photometer)传感器、温度(thermometer)传感器

3.位置传感器

方向(orientation)传感器、磁力(magnetometer)传感器

如何实现摇一摇反馈功能

1.显示出手机中所有的传感器

先获取SensorManager对象

SensorManager sensorManager = (SensorManager).getSystemService(SENSOR_SERVICE);

列出来所有的传感器

 List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);

为了实现摇一摇功能,我写了一个叫shakeUtils工具类并且实现了SensorEventListener,这样我就需要实现下面两个方法

     /**
     * 传感器精度变化时回调
     */
 @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
     /**
     * 传感器数据变化时回调
     */
    @Override
    public void onSensorChanged(SensorEvent event) {
        int sensorType = event.sensor.getType();
        float[] values = event.values;
        if (sensorType == Sensor.TYPE_ACCELEROMETER) {
            //这里可以调节摇一摇的灵敏度
            if ((Math.abs(values[0]) > 12 || Math.abs(values[1]) > 12 || Math.abs(values[2]) > 12)) {
                System.out.println("sensor value == " + " " + values[0] + " " + values[1] + " " + values[2]);
                if (null != mOnShakeListener) {
                    mOnShakeListener.onShake();
                }
            }
        }

        if (sensorType == Sensor.TYPE_AMBIENT_TEMPERATURE) {
            //todo
        }
    }

在主函数里主要这样调用shakeUtils就行了:

 shakeUtils = new ShakeUtils(this);
        shakeUtils.setOnShakeListener(new ShakeUtils.OnShakeListener() {
            @Override
            public void onShake() {
                Toast.makeText(MainActivity.this, "摇了摇", Toast.LENGTH_SHORT).show();
                confirmDialog.setOnConfirmListener(new ConfirmDialog.OnConfirmClickListener() {
                    @Override
                    public void onFeedBack() {
                        gotoFeedBackActivity();
                    }

                    @Override
                    public void onScreenShot() {
                        saveScreenShoot(rootView);

                    }
                });
                confirmDialog.show();

            }
        });
    }

有一点需要注意一下,我们SensorManager让我们能拿到设备的sensors,但是当你不用sensors的时候,当你的activity处于pause的时候,sensor不会自动关闭的,这就会导致你的电池几个小时就会将电耗尽。例子里有一个

最后还是附上源码,有需要的朋友可以拿去用,直达链接。开源让我们不断进步。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • Android传感器定义 Android 传感器相关术语微机电传感器(MEMS)MEMS 通常制作在规格很小的硅芯...
    Jannonx阅读 4,292评论 0 1
  • 最近在搞一个自己的App,突发一个想法,给App加一个摇一摇随机查看图片的功能,这样可以使得用户在使用App的时候...
    _SOLID阅读 19,106评论 1 31
  • 文|静水流深思 秋天在看我 问,这么晚还不休息? 我把烧焦的木炭从篝火中取出 顺便砍下足以抵御严寒的木材 告诉几个...
    一日蜉蝣君阅读 161评论 0 2
  • 秋天,葡萄的功效堪比冬虫夏草,可惜很多人不知道~ 秋季是吃葡萄的好时机,你经常吃葡萄吗?吃葡萄有什么好处吗?葡萄该...
    湖南籍心旷神怡阅读 317评论 0 0
  • 无需太多别人的理解, 但需要对自己的呵护。
    暖风吹麦浪阅读 151评论 2 1