android动态权限申请及蓝牙扫描问题



1)android 平台:
1.1 android 动态权限申请处理方案:
android6.0 及以上系统,危险权限(音频权限,定位权限,电话权限):
android动态权限申请及蓝牙扫描问题_第1张图片


说明:以下信息是方案制定的依据。上述方案是针对普遍现象处理。
普遍现象:在首次安装后,危险权限检测不准(检测结果为禁止,实际上是询问,仍可以去申请)。之后对权限检测结果基本是准确的。在沙盒中添加记录:标记是否申请过目标权限。
特殊现象:部分手机对部分权限的检测结果不可靠。忽略处理。
比如,360-N5S android7.0,系统api检测定位权限判断不准,无论是禁止/允许/提示,总是返回允许状态。
每次扫描时系统自动弹出请求定位权限弹框,不管用户上次是否允许/拒绝定位权限。但是如果用户上次选择禁止(永久拒绝),就不弹框了。
如果用户选择拒绝,下次还会弹框请求.
如果用户选择禁止(永久拒绝),下次不会弹框请求.

1.2 蓝牙扫描(开启蓝牙)问题:
蓝牙扫描处理方案步骤:
1)检测定位权限,禁止则终止流程。询问状态则去申请,允许则继续流程。
2)检测蓝牙状态,非STATE_ON则静默打开。
3)再次检测蓝牙状态,非STATE_ON(蓝牙权限可能被禁止)时发送Intent打开。

android动态权限申请及蓝牙扫描问题_第2张图片
说明:以下信息是方案制定的依据。
蓝牙扫描需要条件:
a. 打开系统蓝牙开关。(必须)
b. 允许定位权限。(Android6.0及以上)
c. 打开定位开关。(少数手机)

定位开关只在极少数手机上需要,并且软件也无法判断哪些手机扫描蓝牙必须要打开定位开关。
所以不能预先去判断没打开定位开关就不去扫描。
目前是将其作为扫描失败的一种可能性通过弹框报错的方式提示用户。

系统api提供2种方式打开蓝牙开关:
a 静默打开。蓝牙权限被禁止后此方式失效。

 mBluetoothAdapter.enable();

b 发送Intent打开。(目前农行即采用此方式)

Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

enableBtIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

mContext.startActivity(enableBtIntent);






你可能感兴趣的:(android)