2016-08-15 65 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

謝謝!編輯答案。 –

相關問題