Foused Location Api를 사용할 때 Settings Api를 사용하여 사용자의 설정을 확인해야 합니다. (때로는 GPS만 켜도 부족할 때도 있습니다)
총결산
SettingsApi를 사용하여 사용자의 설정을 확인하고 알림 설정을 표시하는 대화상자
FuusedLocation Provider Api에 문제가 있는 경우
Google Play Service에 포함된 FusedLocationProviderApi GPS 기반 위치 측정과 네트워크 기반 위치 측정을 결합한 위치 정보 획득 구글 I/O 2013 발표 은 조합이 얼마나 강한지 알 수 있습니다.응용 프로그램 개발자는 다음과 같은 방식으로 위치 정보를 쉽게 얻을 수 있다
// (GoogleApiClientの初期化などは省略)
private void requestLocationUpdate() {
if (mGoogleApiClient.isConnected()) {
// 位置情報の取得が完了したタイミングでListnerが呼ばれる
FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, createLocationRequest(), mLocationListener);
}
}
private LocationRequest createLocationRequest() {
return new LocationRequest()
.setInterval(1000)
.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
}
그러나 이 코드는 사용자가 아래처럼 위치 정보를 열 수 있도록 설정할 때 Listener (!) 를 호출하지 않습니다.왜 위의 예는 움직이지 않습니까
손 옆에 있는 안드로이드 5.1과 4.4에서는 위치 정보 On/Off뿐 아니라 3가지 위치 정보 모드를 설정할 수 있다.위치 정보 모드를 "터미널(GPS를 통해서만 현재 위치 지정)"으로 설정하면 "Google Play Service에 데이터를 제공할 수 있는 권한이 없음"으로 간주됩니다.FusedLocationApi.RequestLocation Updates는 특별한 예외는 아니지만 아무것도 하지 않습니다.
Stack overflow의 이 대답.에 따르면 이전에는 Google app location setting이라는 개별 설정 항목이 있었던 것 같습니다.현재 이 프로젝트는 위의 3가지 위치 정보 모드와 결합된 것 같습니다. 예를 들어 위치 정보 모드를 '고정밀' 으로 바꾸려면 Google에 정보를 전달할 수 있습니까?대화 상자.
이러한 쓰레기 같은 행위는 사실상 Google이 인정한 것으로 관리 응용 프로그램에서 위치 정보 설정 - Nexus 도움말 에는 'Google의 위치 정보 서비스를 On' 으로 설정하기 위해 '위치 정보' > '모드' 를 클릭한 후 '고정밀' 또는 '배터리 절약' 모드를 선택한다고 쓰여 있다.
Settingsapi를 사용하여 사용자 설정 확인 및 대화 상자 표시
이러한 슬픔을 완화하기 위해 Google Play Service에 포함된 SettingsApi도 사용할 수 있습니다.이 반의 업무는 크게 두 가지가 있다
1. 사용자가 원하는 위치 정보 설정을 만족하는지 확인
2. 사용자가 위치 정보 설정을 변경하는 대화 상자를 표시합니다.
구체적인 인코딩은 아래와 같다
private static final int REQUEST_LOCATION_SET = 123; // 適当なリクエストコード
private void checkLocationPreference() {
// 1. ユーザが必要な位置情報設定を満たしているか確認する
PendingResult<> result = LocationServices.SettingsApi.checkLocationSettings(
mGoogleApiClient,
new LocationSettingsRequest.Builder().addLocationRequest(createLocationRequest()).build());
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
// 位置情報が利用できる
// FusedLocationApi.requestLocationUpdatesなどを呼び出す
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
try {
// 2. ユーザに位置情報設定を変更してもらうためのダイアログを表示する
status.startResolutionForResult(this /* activity */, REQUEST_LOCATION_SET);
} catch (IntentSender.SendIntentException e) {
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// 位置情報が取得できず、なおかつその状態からの復帰も難しい時呼ばれるらしい
break;
}}});
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_LOCATION_SET) {
// ユーザのダイアログに対する応答をここで確認できる
switch (resultCode) {
case Activity.RESULT_OK:
// TODO
break;
case Activity.RESULT_CANCELED:
// TODO
break;
}
}
}
사용자의 설정을 변경해야 할 때 비슷한 느낌의 대화상자가 나타납니다참고 자료
Google이 github에 공개한 샘플 같은 것이 가장 참고 가치가 있습니다.
https://github.com/googlesamples/android-play-location/tree/master/LocationSettings
Reference
이 문제에 관하여(Foused Location Api를 사용할 때 Settings Api를 사용하여 사용자의 설정을 확인해야 합니다. (때로는 GPS만 켜도 부족할 때도 있습니다)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/daisy1754/items/aa9ad75d1a84b745469b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)