[英]MarshMallow Permission dialog doesn't prompt
在棉花糖中,如果第一次拒絕該權限,則運行時權限對話框不會再次提示。 我必須3危險權限WRITE_EXTERNAL_STORAGE,READ_SMS和CAMERA權限。 誰能告訴我我要去哪里錯了。
if (Build.VERSION.SDK_INT >= 23) {
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
} else {
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}
}
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
} else {
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.CAMERA},
MY_PERMISSIONS_REQUEST_CAMERA);
}
}
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
} else {
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.READ_SMS},
MY_PERMISSIONS_REQUEST_SMS);
}
}
}
}
我想你一定要用
requestPermissions(new String[]{Manifest.permission.CAMERA}, Constants.RESULT_CODE);
代替
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.CAMERA},
MY_PERMISSIONS_REQUEST_CAMERA);
使用此代碼可能會幫助您
在要打開權限請求對話框的位置使用此代碼。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
requestPermissions(new String[]{Manifest.permission.CAMERA}, 2);
requestPermissions(new String[]{Manifest.permission.READ_SMS}, 3);
}
下面的代碼用於處理權限對話框的響應(再次打開權限對話框以及授予或拒絕權限檢查等)
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
else{
Log.e("permission force:", "Here you code if anyone check never and denied request of Write External Storage");
}
}
} else if (requestCode == 2) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 2);
}else{
Log.e("permission force:", "Here you code if anyone check never and denied request of Camera");
}
}
}else if (requestCode == 3) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
if (shouldShowRequestPermissionRationale(Manifest.permission.READ_SMS)) {
requestPermissions(new String[]{Manifest.permission.READ_SMS}, 3);
}else{
Log.e("permission force:", "Here you code if anyone check never and denied request of ReadSMS");
}
}
}
}
運行時權限API較為混亂的方面之一是,僅當在onRequestPermissionsResult()
回調中獲得PERMISSION_DENIED
時,才應使用shouldShowRequestPermissionRationale()
。 在其他地方這樣做可能會導致奇怪的行為。
最好的選擇是檢查所需的許可權,如果您的應用程序沒有許可權,則請求該許可權。 如果需要,在結果中處理拒絕。
您可能會發現此幫助程序庫更容易處理,因為它可以為您處理此問題,還可以幫助您的應用程序遵循針對ui的Google准則: https : //github.com/hiqes/andele
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.