2015-11-20 2 views
-1

Я хочу использовать GPS в своем приложении. но когда я попытался получить показания GPS, как показано belwo в коде, Android студия дала мне ошибку belwo упомянулGPS считывание невозможно получить

despit все необходимые разрешения добавляются в файл манифеста

код:

LocationManager lm = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE); 
    LocationListener ll = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      Log.w(TAG, "onLocationChanged"); 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      Log.w(TAG, "onStatusChanged"); 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      Log.w(TAG, "onProviderEnabled"); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      Log.w(TAG, "onProviderDisabled"); 
     } 
    }; 
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);//error at this line 

enter image description here

+1

https: // StackOverflow. com/questions/32635704/cant-get-the-permission – CommonsWare

+0

@CommonsWare, но все разрешения добавлены. – LetsamrIt

+1

Цитируя мой ответ: «Для этих разрешений для вашего приложения targetSdkVersion 23+ требуется не только элемент , но и **, вы также должны запрашивать эти разрешения во время выполнения от пользователя на Android 6.0+, используя такие методы, как checkSelfPermission() и requestPermissions() **. " (выделено мной) – CommonsWare

ответ

1

Это связано с тем, что в Marshmallow (версия для Android версии 6.0) пользователи могут отключать разрешения. Просто оберните эту проверку, чтобы убедиться, что разрешение включено до вашего кода местоположения.

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 

} 

Вы также должны написать в запросе кода запроса другого пользователя, который запросит разрешение у пользователя, если у него его нет.

Вот хороший способ разрешения запроса:

public void requestPermissions(List<String> permissions, ActivityCompat.OnRequestPermissionsResultCallback onRequestPermissionsResultCallback) { 
    String[] params = permissions.toArray(new String[permissions.size()]); 
    requestPermissions(params, onRequestPermissionsResultCallback); 
} 

В вашем случае вам придется передать его местоположение разрешений, которые вы можете получить с помощью этого метода:

private List<String> getRequiredLocationPermissions() { 
    String accessCoarsePermission = android.Manifest.permission.ACCESS_COARSE_LOCATION; 
    String accessFineLocationPermission = android.Manifest.permission.ACCESS_FINE_LOCATION; 
    int hasCoarsePermission = ContextCompat.checkSelfPermission(getActivity(), accessCoarsePermission); 
    int hasFineLocationPermission = ContextCompat.checkSelfPermission(getActivity(), accessFineLocationPermission); 
    List<String> permissions = new ArrayList<>(); 
    if (hasCoarsePermission != PackageManager.PERMISSION_GRANTED) { 
     permissions.add(accessCoarsePermission); 
    } 
    if (hasFineLocationPermission != PackageManager.PERMISSION_GRANTED) { 
     permissions.add(accessFineLocationPermission); 
    } 
    return permissions; 
} 
Смежные вопросы