2015-08-25 2 views
3

Я написал простое приложение Hello World для отладки некоторых проблем с разрешениями, которые у меня есть.Разрешений, предоставленных на эмулятор Android

Проблема в том, что мое приложение не может получить разрешения на использование чего-либо. Да, я использую

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

да и я ставлю эту метку прямо под <manifest> в AndroidManifest.xml

Если удалить все <uses-permission> теги манифеста и перейти к Settings > Apps > TestApp, он говорит Разрешения не просил

Если я поставить метки обратно, он говорит разрешения не предоставляются

Если я отлаживаю фактическое устройство, он говорит, что разрешения есть, поэтому похоже, что эта проблема возникает только на эмуляторе! Тем не менее, он также работает, когда я запускаю проект android-play-location/LocationUpdates с сайта developer.android.com с использованием того же эмулятора, поэтому, возможно, что-то не так с моей настройкой проекта.

Любые идеи?

  • IDE: Android Студия
  • Virtual Device: Nexus_5_API_23
  • OS: гостевой Ubuntu 14.04 работает на хосте OS X Yosemite (VMWare Fusion)

ответ

4

Если я поставить метки обратно в , он говорит: Разрешений нет

Это потому, что вы тестируете на Android 6.0 и своих targetSdkVersion установлен на 23.

Если я отладки на реальном устройстве, он говорит, что разрешения есть так выглядит эта проблема только происходит на эмуляторе!

Нет, это происходит только на Android 6.0+.

Однако он также работает, когда я запускаю проект Android-play-location/LocationUpdates с сайта developer.android.com с использованием того же эмулятора, поэтому, возможно, что-то не так с моей настройкой проекта.

Этот проект, вероятно, имеет targetSdkVersion ниже 23.

ACCESS_FINE_LOCATION регулируется the Android 6.0 runtime permission system. Либо обновите приложение, чтобы использовать эту систему, либо оставьте targetSdkVersion ниже 23, пока вы не будете готовы к этому.

3

просто запросить разрешение местоположение, если вы работаете на M

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 
} 

ждать для результата в

@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 
    } 
} 
Смежные вопросы