android 6.0 权限管理

AndroidManifest.xmljava

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

MainActivity.javaandroid

public static final int CODE_FOR_READ_PERMISSION = 1111;

//点击按钮
public void doButton(View view) {
		checkPermission();
	}

private void checkPermission() {
	int hasPermission = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE);
	if(hasPermission != PackageManager.PERMISSION_GRANTED){
		Log.d(TAG, "没有此权限" );
		if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
			Log.d(TAG, "解释为何须要");
			AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
					.setMessage("该功能须要赋予访问内存的权限,不开启将没法正常工做!")
					.setPositiveButton("肯定", new DialogInterface.OnClickListener() {
						[@Override](https://my.oschina.net/u/1162528)
						public void onClick(DialogInterface dialog, int which) {
							ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, CODE_FOR_READ_PERMISSION);
						}
					}).create();
			dialog.show();
		}else{
			Log.d(TAG, "第一次 或者 勾选了 不在询问 ");
			ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, CODE_FOR_READ_PERMISSION);
		}
	} else {
		Log.d(TAG, "已有此权限,进行操做");
	}
}

[@Override](https://my.oschina.net/u/1162528)
public void onRequestPermissionsResult(int requestCode, [@NonNull](https://my.oschina.net/u/2981441) String[] permissions, [@NonNull](https://my.oschina.net/u/2981441) int[] grantResults) {
	super.onRequestPermissionsResult(requestCode, permissions, grantResults);

	switch (requestCode) {
		case CODE_FOR_READ_PERMISSION:
			if(permissions[0].equals(Manifest.permission.READ_EXTERNAL_STORAGE)
					&& grantResults[0] == PackageManager.PERMISSION_GRANTED){
				// 赞成
				Log.d(TAG, "赞成,进行操做");

			} else {
				// 不一样意
				Log.d(TAG, "拒绝");
				if (!ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
					Log.d(TAG, "提醒用户须要手动打开权限");
					AlertDialog dialog = new AlertDialog.Builder(this)
							.setMessage("该功能须要赋予访问存储的权限,若要使用此功能,请手动打开权限")
							.setPositiveButton("肯定", new DialogInterface.OnClickListener() {
								[@Override](https://my.oschina.net/u/1162528)
								public void onClick(DialogInterface dialog, int which) {

								}
							}).create();
					dialog.show();
				}
			}
			break;
		default:
	}
}

注意安全

在Fragment中申请权限时,须要用Fragment的方法进行申请,不然会回调Activity的onRequestPermissionsResult方法,Fragment的此方法收不到回调

ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)
//变为
shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE)

 ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, CODE_FOR_WRITE_PERMISSION);
 //变为
 requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, CODE_FOR_READ_PERMISSION);

参考 Android6.0动态权限申请步骤以及须要注意的一些坑 http://blog.csdn.net/nnmmbb/article/details/53706763ide

Android 6.0 运行时权限管理最佳实践
http://blog.csdn.net/yanzhenjie1003/article/details/52503533/

android permission权限与安全机制解析(下)
http://blog.csdn.net/self_study/article/details/50186435
相关文章
相关标签/搜索