Closed
Description
【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】
建议收集
-
issue 是否有人曾提过类似的问题?【必答】否
-
框架文档是否有提及到此问题?【必答】:否
-
你觉得框架有什么不足之处?【必答】希望增加 蓝牙服务(系统栏蓝牙按钮),wifi服务(系统栏wifi按钮),定位服务(系统栏定位按钮)的开关跳转逻辑?
-
你觉得该怎么去完善会比较好?【非必答】
PermissionDelegateImplV23
/**
* 是否有 Ble服务 权限
*/
private static boolean isGrantedBlePermission(Context context) {
BluetoothManager manager = (BluetoothManager) context.getApplicationContext().getSystemService(Context.BLUETOOTH_SERVICE);
if (manager == null) {
return BluetoothAdapter.getDefaultAdapter().isEnabled();
} else {
return manager.getAdapter().isEnabled();
}
}
/**
* 获取 ble服务 权限设置界面意图
*/
private static Intent getBlePermissionIntent(Context context) {
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
if (!PermissionUtils.areActivityIntent(context, intent)) {
intent = PermissionUtils.getApplicationDetailsIntent(context);
}
return intent;
}
/**
* 是否有 wifi服务 权限
*/
private static boolean isGrantedWifiPermission(Context context) {
WifiManager manager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (manager == null) return false
return manager.isWifiEnabled();
}
/**
* 获取 WiFi服务 权限设置界面意图
*/
private static Intent getWifiPermissionIntent(Context context) {
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
if (!PermissionUtils.areActivityIntent(context, intent)) {
intent = PermissionUtils.getApplicationDetailsIntent(context);
}
return intent;
}
/**
* 是否有 位置服务 权限
*/
private static boolean isGrantedLocationPermission(Context context) {
LocationManager manager = (LocationManager) context.getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
if (manager == null) return false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
return manager.isLocationEnabled();
} else
return (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)
|| manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER));
}
/**
* 获取 位置服务 权限设置界面意图
*/
private static Intent getLocationPermissionIntent(Context context) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
if (!PermissionUtils.areActivityIntent(context, intent)) {
intent = PermissionUtils.getApplicationDetailsIntent(context);
}
return intent;
}
***
/**
* 申请特殊权限
*/
public void requestSpecialPermission() {
Bundle arguments = getArguments();
Activity activity = getActivity();
if (arguments == null || activity == null) {
return;
}
List<String> allPermissions = arguments.getStringArrayList(REQUEST_PERMISSIONS);
// 是否需要申请特殊权限
boolean requestSpecialPermission = false;
// 判断当前是否包含特殊权限
for (String permission : allPermissions) {
if (!PermissionApi.isSpecialPermission(permission)) {
continue;
}
if (PermissionApi.isGrantedPermission(activity, permission)) {
// 已经授予过了,可以跳过
continue;
}
if (!AndroidVersion.isAndroid11() && PermissionUtils.equalsPermission(permission, Permission.MANAGE_EXTERNAL_STORAGE)) {
// 当前必须是 Android 11 及以上版本,因为在旧版本上是拿旧权限做的判断
continue;
}
if (AndroidVersion.isAndroid12()
&& PermissionUtils.equalsPermission(permission, Permission.BLE_SERVICE)
&& !PermissionApi.isGrantedPermission(activity, Permission.BLUETOOTH_CONNECT)) {
//如果是Android 12 没有授予 BLUETOOTH_CONNECT 则先处理 BLUETOOTH_CONNECT 再处理蓝牙服务
ArrayList<String> bluetoothPermission = new ArrayList<>(allPermissions);
bluetoothPermission.remove(Permission.BLE_SERVICE);
splitTwiceRequestPermission(activity, new ArrayList<>(allPermissions),bluetoothPermission , getArguments().getInt(REQUEST_CODE));
return;
}
// 跳转到特殊权限授权页面
startActivityForResult(PermissionUtils.getSmartPermissionIntent(activity,
PermissionUtils.asArrayList(permission)), getArguments().getInt(REQUEST_CODE));
requestSpecialPermission = true;
}
if (requestSpecialPermission) {
return;
}
// 如果没有跳转到特殊权限授权页面,就直接申请危险权限
requestDangerousPermission();
}
***