2015-08-25 87 views
3

我編寫了一個簡單的Hello World應用程序來調試我遇到的一些權限問題。在Android模擬器上沒有授予任何權限

問題是我的應用程序無法獲取使用任何東西的權限。是的,我使用

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

是的,我把這個標籤之下的權利在<manifest> AndroidManifest.xml中

如果我從清單中刪除所有<uses-permission>標籤和去Settings > Apps > TestApp,它說沒有權限要求

如果我把標籤回,它說無權限授予

如果我在實際的設備上進行調試,它說權限在那裏,所以它看起來像這個問題只發生在模擬器上!但是,當我使用相同的模擬器從developer.android.com運行android-play-location/LocationUpdates項目時,它也可以工作,所以也許我的項目設置有問題。

任何想法?

  • IDE:Android Studio中
  • 虛擬設備:Nexus_5_API_23
  • OS:客人的Ubuntu 14.04在主機上運行OS X Yosemite(VMware Fusion的)

回答

4

運行如果我把標籤回,它表示沒有授予權限

這是因爲您正在測試Android 6.0,而您的targetSdkVersion設置爲23.

如果我在實際設備上進行調試,它說權限在那裏,所以它看起來像這個問題只發生在模擬器上!

不,它只發生在Android 6.0+上。

但是,它也適用於從developer.android.com使用相同的模擬器運行android-play-location/LocationUpdates項目,所以也許我的項目設置有問題。

該項目可能有一個targetSdkVersion低於23

ACCESS_FINE_LOCATIONthe Android 6.0 runtime permission system管轄。請更新您的應用以使用該系統,或者將您的targetSdkVersion降至23以下,直至您準備好。

3

只是要求位置的權限,如果你是在M在

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] result){ 
    super.onRequestPermissionsResult(requestCode, permissions, result); 


    if(requestCode == LOCATION_PERMISSION && result[0] == PackageManager.PERMISSION_GRANTED){ 
     //do things as usual init map or something else when location permission is granted 
    } 
} 
運行

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && getActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ 
     requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION); 
}else{ 
    //Do things as usual 
} 

等待結果