获取运动数据权限怎么来的?

获取运动数据权限

现象

Android 开发过程中 我们可能会申请到各种权限 有些属于高危权限,需要用户同意才能获取,有些则不需要动态申请只要在AndroidManifese.xml中注册就好了。今天我们来讲一下一些’'诡异的权限",为什么说它诡异呢,因为这些权限根本不需要动态申请,只需要在AndroidManifese.xml中注册就好,甚至根本连清单文件里都不需要注册,但是这些权限却会在你使用到功能模块的时候弹窗出来,而且它们还可能出现在应用设置界面的权限申请列表中。这就很尴尬了,明明我没有申请这些权限,可能都没用到,为什么会突然冒出来?

比如:网络使用权限、开启或关闭WIFI、开启或关闭蓝牙、读应用列表权限、获取运动数据 等。

由来

有些权限在低版本根本不需要申请,也不弹窗提示,而这些问题出现的原因都是由于各大厂商的ROM定制引起的。

  1. 网络使用权限
    典型:ViVo手机 弹窗让用户选择
  2. 开启或关闭WIFI
    典型:OPPO VIVO 小米等 弹窗让用户选择
  3. 开启或关闭蓝牙
    典型:OPPO VIVO 小米等 弹窗让用户选择
  4. 读应用列表权限
    典型:魅族 弹窗让用户选择
  5. 获取运动数据
    典型:华为 应用设置列表显示获取运动数据权限(部分机型会弹窗让用户选择,没测过)

我们今天着重讲下获取运动数据这个权限,听名字我们大概猜得出这个权限跟传感器有关,但是系统传感器根本不用我们申请,为什么在权限申请列表里有这个,我们看下常用的几个传感器类型
public static final int TYPE_ACCELEROMETER = 1;

    TYPE_ACCELEROMETER  //加速度传感器
 	TYPE_ORIENTATION  //方向传感器
    TYPE_GYROSCOPE  //陀螺仪传感器
 	TYPE_LIGHT  //光传感器
 	TYPE_PRESSURE  //压力传感器
 	TYPE_TEMPERATURE //温度传感器
 	TYPE_GRAVITY  //重力传感器
 	TYPE_LINEAR_ACCELERATION //加速度传感器

经测试,只要我们注册(这里的注册是指SensorManager.registerListener())了并且调用了(只写代码是不会立即加上的,必须运行到代码)TYPE_ACCELEROMETER加速度传感器,申请列表就会出现,而其他的传感器则不会。

    SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    SensorEventListener sensorEventListener=   new SensorEventListener() {
    @Override
    public void onSensorChanged(SensorEvent event) {
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
    };
    Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    //只要注册并且运行了,就会有 获取运动数据  权限
    sm.registerListener(sensorEventListener, sensor,SensorManager.SENSOR_DELAY_UI);

并且这个权限一旦同意,再取消注册这个传感器也没用,权限依然在,只能手动到权限列表关闭。
另外如果用户拒绝或者手动关闭这个权限,这时候我们的程序是不会报错或者闪退的,但是却获取不到这些信息。

总结

因为Android手机的碎片化,各大厂商的ROM定制导致的问题,让开发者越来越头疼,不过这些权限也同样是为了用户的隐私安全,只能期待越来越好吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值