onRequestPermissionsResult被无限调用

我正在使用运行时权限请求,但是有一个问题。 看来,callback方法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; } } 

Solutions Collecting From Web of "onRequestPermissionsResult被无限调用"

正如你在评论中提到的,这里的问题是触发请求权限对话框的代码在onResume方法中被调用。

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

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

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