2016-03-29 137 views
2

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

     } 

但如果我点击“允许”或“拒绝”,这种方法是没有调用,因为应用程序处于后台模式...我记录和onStop方法,并且在显示权限窗口后调用它们。

enter image description here

+0

它是否强制停止您的应用程序拒绝? –

+0

并不重要,当显示对话框时,应用程序将在后台进行。它不等待答案 – Nininea

+0

我认为这是problamatic Intent intent = new Intent(...); startActivity(intent); finish(); ,不知道你的if(结果),但其他部分是problamatic –

回答

10

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

机器人:noHistory =“真”

我只是删除此属性和启动应用程序,因为它是预期工作。

+2

+1这解决了我的问题,似乎很愚蠢的是,这会打破它,没有另一种方式来请求权限,没有background'ing应用程序我有一个启动屏幕,要求位置,但我不想让他们回到启动屏幕,因此,我不得不以编程方式进行编程。为什么Google ?! – Justin

+0

谢谢。它工作正常。 –

0

尝试用这种

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

这样,你开始从你的活动的要求和回调将被接收。

+0

这段代码是无效的:( – Nininea

+0

我改变了它,现在尝试,如果它不工作,将进一步研究它 –

+0

有什么不同的问题 –

相关问题