2016-08-15 215 views
8

我正在使用运行时权限请求,但是存在问题。看起来回调方法onRequestPermissionsResult被无限调用。因此,当用户拒绝该请求时,该应用程序无响应。onRequestPermissionsResult被无限调用

每次用户单击“拒绝”时,权限对话框都会重新出现。只有点击“永不再问”才会再次出现。 *当按'允许'时效果很好 - 没有任何问题。

有什么办法可以在一次之后取消被调用的方法吗?

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
{ 
    ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.ACCESS_FINE_LOCATION }, LOCATION_PERMISSION_CUSTOM_REQUEST_CODE); 
} 


@Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch(requestCode) 
     { 
      case LOCATION_PERMISSION_CUSTOM_REQUEST_CODE: 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        // permission was granted 
        MyManager.connect(); 
        return; 
       } else { 
        // permission denied 
        return; 
       } 
      default: 
       return; 
     } 
    } 
+0

请发布您的代码 –

+0

@GilMoshayof编辑帖子)谢谢 – BVtp

+0

在MyManager.connect()中会发生什么? –

回答

12

这里的问题,因为你在评论中提到的,是触发请求允许对话框的代码被调用的方法onResume

当请求对话框权限结束时,运行时会在触发它的活动上调用onResume,就像任何以对话为主题的活动一样。

在你的情况下,拒绝该权限会再次触发onResume,这将再次显示对话框并导致无限循环。

将此权限请求移至onCreate或其他一些流程将解决您的问题。

+3

只需澄清一点:“就像任何对话框一样” - 对于对话主题活动。对话框不是真的,因为“对话框”不会影响活动的生命周期。在这种情况下,运行时权限对话框是一个以对话框为主题的活动。 – CommonsWare

+0

谢谢!编辑答案。 –

相关问题