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

Nin*_*nea 3 android android-permissions android-6.0-marshmallow

我需要手动为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;.... 
  }
}
Run Code Online (Sandbox Code Playgroud)

另外,在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;
            }

        }
Run Code Online (Sandbox Code Playgroud)

但是,如果我点击"允许"或"拒绝",此方法不叫,因为应用程序在后台模式......我登录onPauseonStop方法和他们两个被称为显示许可窗口之后.

在此输入图像描述

Nin*_*nea 11

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

机器人:noHistory = "真"

我刚删除了这个属性,应用程序开始按预期工作.

  • +1这解决了我的问题.看起来很愚蠢,这会打破它,并没有其他方式来请求权限,而无需后台应用程序.我有一个启动屏幕询问位置,但我不希望他们回到启动屏幕.因此,我必须以编程方式执行,而不是以声明方式.为什么谷歌?! (2认同)