2017-10-19 172 views
0

我在我的活動onActivityResult內請求權限,發生的情況是我的活動在顯示請求權限對話框時被暫停。爲什麼是這樣,我可以以某種方式防止它?請求權限對話框暫停我的活動

所有我做的是在一個正常的方式請求許可:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED || 
       ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { 
       requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 
         REQUEST_LOCATION_ACCESS_CODE); 
+0

「爲什麼會這樣」 - 您正在開始另一項活動(請求權限對話框)。 「我能以某種方式阻止它嗎?」 - 不要使用'危險'權限,所以你不需要調用'requestPermissions()'。 – CommonsWare

回答

2

正在發生的事情是,雖然顯示的請求 權限對話框我的活動被暫停。這是爲什麼?

requestPermissions docs says

This method may start an activity allowing the user to choose which permissions to grant and which to reject. Hence, you should be prepared that your activity may be paused and resumed。此外,授予某些權限的 可能需要重新啓動您的應用程序。在 這種情況下,系統將在 將結果傳遞給onRequestPermissionsResult(int, String [],int [])之前重新創建活動堆棧。

雖然另一種解決方案是在onStop如果移動你的代碼的方法活動#requestPermissions的可能,適合

0

源代碼:

public final void requestPermissions(@NonNull String[] permissions, int requestCode) { 
    if (requestCode < 0) { 
     throw new IllegalArgumentException("requestCode should be >= 0"); 
    } 
    if (mHasCurrentPermissionsRequest) { 
     Log.w(TAG, "Can reqeust only one set of permissions at a time"); 
     // Dispatch the callback with empty arrays which means a cancellation. 
     onRequestPermissionsResult(requestCode, new String[0], new int[0]); 
     return; 
    } 
    Intent intent = getPackageManager().buildRequestPermissionsIntent(permissions); 
    startActivityForResult(REQUEST_PERMISSIONS_WHO_PREFIX, intent, requestCode, null); 
    mHasCurrentPermissionsRequest = true; 
} 

我們可以清楚地看到,一個新活動打開。因此調用活動中的肯定會被調用。所以這是的預期行爲。

如果要防止暫停活動,請確保在打開該活動前已擁有所需的權限。

如果您的活動是主要活動,請添加活動活動。否則,請在開啓活動前檢查權限。