Android12蓝⽛权限(解决闪退问题)
项⽬配置是compileSdkVersion31 targetSdkVersion30 ⼿机升级了Android 12后运⾏Crash。照理说targetSdkVersion没有⽤31,怎么会报Android 12的蓝⽛权限错误,百思不得其解,先来看看Android12的蓝⽛权限。
1.Manifest权限
<manifest>
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
<!--请求旧设备上的蓝⽛权限,可设置android:maxSdkVersion为30。这个兼容性步骤帮助系统只授予你的应⽤程序所需的蓝⽛权限,当安装在运⾏Android 12或更⾼的设备上。>
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<!-- 有蓝⽛扫描功能的时候需要。 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<!--如果你的应⽤程序不使⽤蓝⽛扫描结果得出物理位置信息,可以加上usesPermissionFlags声明你的scan结果不会⽤于推导出物理位置。-->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<!--仅当你的应⽤程序使设备可被蓝⽛设备发现时需要。 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
手机总是闪退是什么原因<!-- 只有当你的应⽤程序与已经配对的蓝⽛设备通信时才需要。 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- 只有当你的应⽤程序使⽤蓝⽛扫描结果来获取物理位置时才需要。-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--在Android 12 如果你确定你的应⽤程序从来没有从蓝⽛扫描结果获取物理位置,则不需要这个权限。-->
<!--在Android 12以下 这个权限是必须要的-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--如果你的应⽤程序⽀持⼀个服务,并且可以运⾏在Android 10 (API级别29)或Android 11,你还必须声明
ACCESS_BACKGROUND_LOCATION权限来发现蓝⽛设备。-->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
2.动态请求相关蓝⽛权限
BLUETOOTH_ADVERTISE、BLUETOOTH_CONNECT和BLUETOOTH_SCAN权限是运⾏时权限。因此必须在应⽤程序中明确请求⽤户批准,才能查蓝⽛设备,使设备可被其他设备发现,或与已经配对的蓝⽛设备通信。当你的应⽤程序请求这些权限中的⾄少⼀个,系统提⽰⽤户允许你的应⽤程序访问附近的设备,如图1所⽰。
//所以请加上这段代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
if (!checkSinglePermission(Manifest.permission.BLUETOOTH_SCAN)
||!checkSinglePermission(Manifest.permission.BLUETOOTH_CONNECT)) {
String[] list =new String[]{Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT};
requestPermissions(list, Constants.PERMISSION_REQUEST_SCAN);
}
}
3.为什么闪退
先完成1,2两步, 然后再去做各种蓝⽛有关的操作,不然在Android 12 ⼿机上会直接闪退!!
参考链接:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论