Android11 蓝牙权限详解
Android 11 引入了一些新的权限控制和限制,其中包括了对蓝牙权限的改变。本文将详细介绍 Android 11 中的蓝牙权限,并提供相应的代码示例。
蓝牙权限的改变
在 Android 11 中,对蓝牙权限进行了以下改变:
ACCESS_FINE_LOCATION
权限现在是访问蓝牙的必需权限,而不再是可选权限。
请求
ACCESS_FINE_LOCATION
权限后,应用需要在前台运行或具有可见的通知,以保持对蓝牙的访问权限。
对于已经配对的蓝牙设备,应用无需进行额外的权限请求。
下面将分别介绍这些改变,并提供相应的代码示例。
ACCESS_FINE_LOCATION 权限的必需性
在 Android 11 中,要访问蓝牙设备,必须请求
ACCESS_FINE_LOCATION
权限。当应用需要访问蓝牙时,需要首先请求该权限。
// 检查是否已经拥有 ACCESS_FINE_LOCATION 权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// 请求 ACCESS_FINE_LOCATION 权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_PERMISSION_FINE_LOCATION);
} else {
// 已有 ACCESS_FINE_LOCATION 权限,可以进行蓝牙操作
// ...
保持蓝牙权限的方式
在 Android 11 中,应用请求 ACCESS_FINE_LOCATION
权限后,需要保持在前台运行或具有可见的通知,以保持对蓝牙的访问权限。否则,在应用进入后台时,蓝牙将不可用。
// 创建一个前台服务的通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_content))
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
// 将服务设置为前台服务
startForeground(NOTIFICATION_ID, builder.build());
已配对蓝牙设备的访问权限
对于已经配对的蓝牙设备,应用无需进行额外的权限请求。可以直接使用已配对的设备进行蓝牙操作。
// 获取已配对的蓝牙设备列表
Set<BluetoothDevice> pairedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
// 遍历已配对的设备列表,并进行操作
for (BluetoothDevice device : pairedDevices) {
// 对已配对的设备进行蓝牙操作
// ...
Android 11 对蓝牙权限进行了一些改变,现在需要请求 ACCESS_FINE_LOCATION
权限并保持应用在前台运行或具有可见的通知。对于已配对的设备,无需额外的权限请求。
本文提供了相应的代码示例,帮助开发者在 Android 11 中正确处理蓝牙权限。希望能对大家有所帮助。
java 类字段给定一个默认值 java string默认值
如果我们不做任何初始化工作,变量具有什么默认值,或者是否具有默认值? 其实,成员变量在创建时,系统会为其分配一个默认值。不同类型的变量,默认值也不相同。 例:package deep;
public class DefaultValue {
// 实例成员变量
private boolean bool;
private byte b;
private short s;