2016-07-02 127 views
2

從Android 6.0(API級別23)開始,我們可以在運行時詢問權限。但是,根據文檔,所有權限仍然需要在AndroidManifest.xml中定義,因此在低於23的API中,這些權限將在安裝該應用程序之前被授予。基於API級別的請求權限

我只希望在運行時請求ACCESS_FINE_LOCATION權限 - 因爲這是一個敏感權限,所以在安裝之前請求它沒有任何上下文會導致下載量下降。

我針對的是API級別11+的應用程序,所以我想知道是否有可能不要求舊版API中的ACCESS_FINE_LOCATION權限(即,未在AndroidManifest中爲23以上的API列出),並且只請求它爲API 23 +。

更新

爲了澄清,我想知道是否可以做到以下幾點:

AndroidManifest.xml中

IF API_LEVEL>=23: { 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
} 
ELSE: 
{ 
} 
+0

在運行時,您可以通過版本把權限檢查,如果版本> = 23比檢查運行時權限,否則什麼都不做....... –

+0

@ Er.Arjunsaini,我不需要在AndroidManifest.xml中靜態列出這個權限嗎? – Ohad

+0

「在所有版本的Android上,您的應用程序需要在其應用程序清單中聲明正常和危險的權限,如聲明權限中所述。「 – Ohad

回答

2
  • 不能請求權限不是宣佈在清單
  • 不能更改您的清單在運行時。

你可以做的就是讓1味道瞄準API 23+許可申報和另有一番風味未經許可針對API 23-

-1

沒有那是不可能的AndroidManifest .xml

您可以在使用基於該權限的功能之前詢問權限。

​​

現在覆蓋onRequestPermissionsResult()方法,以查看是否允許用戶請求或不

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 

      if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission is granted, Now you can execute function 

      } else { 

       // permission denied, Don't execute your function to avoid any crashes 

      } 
      return; 

} 

你不必檢查這裏 SDK版本以獲取更多信息click here 編碼愉快:)

5

我認爲你可以使用這樣做:

<uses-permission-sdk-23 android:name="string" android:maxSdkVersion="integer" /> 

你可以閱讀更多關於它的官方文檔中:uses-permission-sdk-23