请求权限窗口强制应用程序停止

时间:2016-03-29 07:35:35

标签: android android-6.0-marshmallow android-permissions

我需要手动为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;
            }

        }

但是如果我单击“允许”或“拒绝”,则不调用此方法,因为应用程序处于后台模式...我记录了onPauseonStop方法,并且它们都被调用显示权限窗口后。

enter image description here

2 个答案:

答案 0 :(得分:11)

存在MainActivity问题,在清单文件中将其配置为:

  

机器人:noHistory = “真”

我刚删除了此属性,应用程序开始按预期工作。

答案 1 :(得分:0)

试试这个

      if (!numberExists) {
                    ActivityCompat.requestPermissions(getActivity(),
                            new String[]{Manifest.permission.READ_PHONE_STATE},
                            MY_PERMISSIONS_PHONE_STATE_READ);
                    return;

这样您就可以从活动中启动请求,并且会收到回调。