2016-03-23 2 views
2

Я пытаюсь получить последнее известное местоположение пользователя.LocationService.FusedLocation возвращает null только на некоторых устройствах

После Google API подключен, я называю функцию:

@Override 
public void onConnected(Bundle bundle) { 
    initilizeMap(); 
} 

функция выглядит следующим образом:

private void initilizeMap(){ 
    mLastLocation = LocationServices.FusedLocationApi 
      .getLastLocation(mGoogleApiClient); 

    if (mLastLocation != null){ 
     ... 
    }else{ 
     // location unknown 
    } 
} 

Я открыл Google карты первым, чтобы получить текущее местоположение пользователя , Однако mLastLocation по-прежнему не имеет значения.

Самое интересное, что код работает на планшете Sony. Но сегодня я поменял свой телефон на Nexus, и он не работает на этом устройстве!

Как это исправить?

P.S. Я включил эти разрешения в моем файле манифеста:

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

и Android версии 6.0.1

+0

Похоже, что код в порядке, может быть, он имеет отношение к вашему телефону? –

+0

@EricS. Надеюсь, это не так! Я только что купил его :(Карты Google работают, хотя –

+0

Я уверен, что ваш телефон в порядке, я подумал, может быть, что-то в настройке или что-то в этом роде. –

ответ

1

Любые опасные разрешения, как указано here необходимость быть запрошены во время выполнения, как показано на Requesting Permissions at Run Time иначе вы получите a Permission Denied Ошибка, которая может иметь неожиданные результаты в вашем приложении.

Вы проверяете разрешение с: ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ACCESS_FINE_LOCATION)

он может вернуть либо PackageManager.PERMISSION_GRANTED или PackageManager.PERMISSION_DENIED

если вы получаете PackageManager.PERMISSION_DENIED, то вы можете запросить разрешение с:

ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_LOCATION);

где MY_PERMISSION_REQUEST_ACCESS_LOCATION является вашей переменной int переменной, которая является pas sed для обратного вызова onRequestPermissionsResult, где вы обрабатываете результат разрешения allow/deny.

+0

Спасибо @Pztar !! –

 Смежные вопросы

  • Нет связанных вопросов^_^