我需要手动为API级别23请求权限,并且出现对话框窗口并且应用程序进入后台。
这是我的代码:
@Override
public void onDialogDone(int dialog, boolean result) {
DialogFragment newFragment;
switch (dialog) {
case EULA_DIALOG:
if (result) {
boolean numberExists = _appRegistration.checkPhoneNumber();
if (!numberExists) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_PHONE_STATE},
MY_PERMISSIONS_PHONE_STATE_READ);
return;
} else {
//do some work
}
} else {
Intent intent = new Intent(...);
startActivity(intent);
finish();
}
break;....
}
}
此外,在MainActivity中,我覆盖了以下方法:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case MY_PERMISSIONS_PHONE_STATE_READ: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// do some work
} else {
// do some work
}
return;
}
}
但是如果我单击“允许”或“拒绝”,则不调用此方法,因为应用程序处于后台模式...我记录了onPause
和onStop
方法,并且它们都被调用显示权限窗口后。
答案 0 :(得分:11)
存在MainActivity问题,在清单文件中将其配置为:
机器人:noHistory = “真”
我刚删除了此属性,应用程序开始按预期工作。
答案 1 :(得分:0)
试试这个
if (!numberExists) {
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.READ_PHONE_STATE},
MY_PERMISSIONS_PHONE_STATE_READ);
return;
这样您就可以从活动中启动请求,并且会收到回调。