2016-02-29 193 views
13

我在我大學的IT部門工作,我們正在爲安裝正確設置的eduroam WiFi應用程序工作(也許您已經聽說過)。Android應用程序在安裝時沒有要求權限

但是,我有一個問題,在我自己的LG G4與Android 6.0上運行它。在安裝編譯的* .apk時,雖然它們在AndroidManifest.xml中設置,但它並不要求任何權限。它正在處理所有以前的Android版本。

現在是否需要在運行時詢問權限?

+0

什麼是你的應用程序的'targetSdkVersion'? – CommonsWare

+0

我認爲只有在您的安全設置設置爲「unknown sources = false」時纔會這樣做。任何時候你從一個已知的來源安裝某些東西,比如Play,你就不會看到這個。 – durbnpoisn

+0

我剛剛意識到,Android在安裝時不會要求獲得Wi-Fi狀態許可,而不是從Play商店安裝。你可以在這裏看到區別:http://imgur.com/a/rg2IV –

回答

28

如果您的目標SDK版本是23,那麼您需要在運行時詢問「危險」權限。

如果是這種情況,那麼你應該能夠看到,如果你去Settings > Apps > "Your app" > Permissions沒有授予任何權限。

如果您不想執行新系統,那麼您可以將目標sdk版本降低到22以獲得舊的權限系統。儘管如此,仍然可以使用sdk版本23進行編譯。

有關更多信息,請參閱the documentation

+0

感謝您的建議,儘管我們只使用ACCESS_WIFI_STATE和CHANGE_WIFI_STATE,它們沒有列爲危險權限。但我會嘗試將目標SDK設置爲22。 –

1

如果您想查詢權限運行時,您應該在您的應用程序中編寫特殊請求。就像這樣:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     createPermissions(); 
} 
public void createPermissions(){ 
    String permission = Manifest.permission.READ_SMS; 
    if (ContextCompat.checkSelfPermission(getContext(), permission) != PackageManager.PERMISSION_GRANTED){  
     if(!ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), permission)){ 
       requestPermissions(new String[]{permission}), 
         SMS_PERMISSION); 
     } 
    } 
} 
相關問題