Android手动申请权限

以获得地理位置权限为例

1.添加需要权限

//当Android6.0系统以上时,动态获取权限
private static final String[] PERMISSIONS = new String[]{
        Manifest.permission.ACCESS_COARSE_LOCATION,
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.INTERNET};

2.添加标志

private boolean permissionGranted = true;
//权限的标志
private static final int PERMISSION_CODES = 1001;

3.判断当前版本

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    requestPermission();
}

4.手动申请

/**
 * 动态的进行权限请求
 */
@TargetApi(Build.VERSION_CODES.M)
private void requestPermission() {
    List<String> p = new ArrayList<>();
    for (String permission : PERMISSIONS) {
        if (ContextCompat.checkSelfPermission(getContext(), permission) != PackageManager.PERMISSION_GRANTED) {
            p.add(permission);
        }
    }
    if (p.size() > 0) {
        requestPermissions(p.toArray(new String[p.size()]), PERMISSION_CODES);
    }
}

5.申请回调

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_CODES:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_DENIED) {
                permissionGranted = false;
            } else {
                permissionGranted = true;
            }
            break;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_30711091/article/details/81382127