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

request permission window force application to stop

我需要为 API 级别 23 以及出现对话框 window 和应用程序进入后台的位置手动请求权限。

这是我的代码:

  @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;
            }

        }

但如果我点击 "allow" 或 "deny",则不会调用此方法,因为应用程序处于后台模式...我记录了 onPauseonStop 方法并且在显示权限 window 后调用它们。

试试这个

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

这样您就可以从您的 activity 开始请求,并且会收到回调。

MainActivity 有问题,在清单文件中配置为:

android:noHistory="true"

我刚刚删除了这个 属性 并且应用程序开始按预期运行。