获准应用于应用程序时,它重新启动
问题描述:
我用下面的代码来检查权限:获准应用于应用程序时,它重新启动
if (getActivity().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED || getActivity().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
getActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSIONS);
}
而且贝娄代码我赶上结果:
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
if(requestCode == MY_PERMISSIONS){
if(grantResults[0] != PackageManager.PERMISSION_GRANTED ||
grantResults[1] != PackageManager.PERMISSION_GRANTED){
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.per_check_m);
builder.setCancelable(false);
builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSIONS);
}
}
});
builder.show();
}else {
startActivityForResult(com.media_iran.android.iranama.Utils.ImagePicker.getPickImageIntent(getActivity()), INTENT_REQUEST_GET_IMAGES);
}
}
}
但是,当用户接受的权限,这不是”无需工作,需要重新启动应用程序,并从应用程序历史记录中清除它以获取工作权限。
我发现它是android中的一个错误,但这样其他应用程序如何工作? 有没有解决方法?
答
请尝试下面的代码,这对我来说很完美。 在OnCreate中插入下面的代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasWriteContactsPermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS);
if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.GET_ACCOUNTS, Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_CODE_ASK_PERMISSIONS);
}
}
覆盖onRequestPermissionResult:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_PERMISSIONS:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted add code when permission granted.
signIn();
} else {
// Permission Denied
Toast.makeText(MainActivity.this, "Permission Denied.", Toast.LENGTH_SHORT).show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
答
把你onRequestPermissionsResult()
您的活动。
onRequestPermissionsResult()
在您的片段中的活动中被调用。
我在包含片段的活动上尝试过,但不能再次运行 – Ali
我在FragmentActivity中尝试过,而不是在活动 – Ali
'requestPermissions()'在您的片段上,但onRequestPermissionsResult()代码应该在您的活动中。 –