if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PERMISSION_GRANTED) {//判斷是否已經賦予權限
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//這里可以寫個對話框之類的項向用戶解釋為什么要申請權限,並在對話框的確認鍵后續再次申請權限.它在用戶選擇"不再詢問"的情況下返回false
} else {
//申請權限,字符串數組內是一個或多個要申請的權限,1是申請權限結果的返回參數,在onRequestPermissionsResult可以得知申請結果
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}}
重寫onRequestPermissionsResult
{
if (requestCode == 1) {//requestCode的值是上邊的1
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] == PERMISSION_GRANTED) {
Toast.makeText(this, "" + "權限" + permissions[i] + "申請成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "" + "權限" + permissions[i] + "申請失敗", Toast.LENGTH_SHORT).show();
}
}
}
}
宿主Activity中
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 獲取到Activity下的Fragment
List<Fragment> fragments = getSupportFragmentManager().getFragments();
if (fragments == null)
{
return;
}
// 查找在Fragment中onRequestPermissionsResult方法並調用
for (Fragment fragment : fragments)
{
if (fragment != null)
{
// 這里就會調用我們Fragment中的onRequestPermissionsResult方法
fragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
2.Fragment 中 只用如下方式請求權限
fragment.requestPermissions(mPermissionList,REQUEST_CODE_CAMERA)
而不是 ActivityCompat/ContextCompat
ActivityCompat.requestPermissions((AppCompatActivity)context, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CODE)