Skip to content

希望增加 蓝牙服务(系统栏蓝牙按钮),wifi服务(系统栏wifi按钮),定位服务(系统栏定位按钮)的开关跳转逻辑? #170

Closed
@HuaZaiWuDi

Description

@HuaZaiWuDi

【警告:请务必按照 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();
}
***

Metadata

Metadata

Assignees

Labels

help wantedExtra attention is needed

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions