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
相關文章
相關標籤/搜索