需要更多色彩的
不是代码,而是生活

Android6.0以上动态申请文件读写权限

Android 6.0 引入了动态权限申请机制,将所有权限分成了正常权限和危险权限。应用在使用危险权限时需要动态的申请并得到用户的授权才能使用,而文件读写权限就属于访问用户机密数据的危险权限,用户必须明确批准才能使用这些权限。

1.首先在AndroidManifest.xml中声明权限,在manifest节点下添加:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2.申请权限的代码

private final int REQUEST_PERMISSION_CODE = 1;//请求码 

/**
 * 动态权限申请
 */
private void requestPermission() {
	//判断是否6.0以上的手机
	if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
		//PackageManager.PERMISSION_GRANTED表示同意授权
		if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
				!= PackageManager.PERMISSION_GRANTED) {
			//用户已经拒绝过且选择了不再提示,要给用户开通权限的提示
			//ActivityCompat.shouldShowRequestPermissionRationale返回false是用户选择了不再提示
			if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission
					.WRITE_EXTERNAL_STORAGE)) {
				Toast.makeText(this, "请允许文件读写权限,否则无法正常使用本应用", Toast.LENGTH_LONG).show();
			}

			//申请权限
			String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
			ActivityCompat.requestPermissions(this, permissions, REQUEST_PERMISSION_CODE);//(activity,权限数组,请求码)
		}
	}
}

3.获取授权结果

/**
 * 获取权限请求结果
 *
 * @param requestCode  请求码,即REQUEST_PERMISSION_CODE
 * @param permissions  权限列表,即permissions数组
 * @param grantResults 申请结果,0为成功,-1为失败
 */
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_PERMISSION_CODE) {
        for (int i = 0; i < permissions.length; i++) {
            if (grantResults[i] == 0) {
                Log.i("MainActivity", permissions[i] + "申请成功");
            } else {
                Log.i("MainActivity", permissions[i] + "申请失败");
            }
        }
    }
}

可以在activity的onCreate中调用requestPermission应用启动后即可向用户请求授权。

赞(1) 打赏
未经允许不得转载:代码一线 » Android6.0以上动态申请文件读写权限
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就支持一下本站

支付宝扫一扫打赏

微信扫一扫打赏