FusedLocationProviderClientのAPIを使用して
requestLocationUpdatesを送った際のコールバックですが
Android6.0でのみcallbackが呼ばれず困っております。
7.0や8.0では即座に返ってくることが確認できております。
ソースコードを添付しますのでご教授いただければ幸いです。
各種アクティビティから呼ばれるように設計してあります。
このメソッドが呼ばれる前にはすべてパーミッションの確認は行っております。
java
1public class LocationGetter extends LocationCallback { 2 /** 位置情報取得用LocationManager. */ 3 private final FusedLocationProviderClient fusedLocationClient; 4 private LocationRequest locationRequest; 5 private LocationCallback locationCallback; 6 7 /** 最新の位置情報. */ 8 private Location lastLoc = null; 9 /** 10 * 最新の位置情報を取得する。<BR> 11 * startUpdateLocation後、すぐにgetLastLocを呼ぶと位置情報が取得できていないことがある。 12 * その場合はnullを返すため注意が必要. 13 * @param cntx コンテキスト 14 * @return 最新の位置情報 15 */ 16 public final Location getLastLoc(final Context cntx) { 17 synchronized (this) { 18 return lastLoc; 19 } 20 } 21 22 /** 23 * コンストラクタ. 24 * @param cntx コンテキスト 25 */ 26 public LocationGetter(final Context cntx) { 27 fusedLocationClient = new FusedLocationProviderClient(cntx); 28 createLocationRequest(cntx); 29 createLocationCallback(); 30 } 31 /** 32 * ロケーションリクエスト設定. 33 * @param cntx コンテキスト 34 */ 35 private void createLocationRequest(final Context cntx){ 36 locationRequest = new LocationRequest(); 37 locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 38 } 39 /** 40 * 位置情報取得開始. 41 * @param cntx コンテキスト 42 */ 43 public final void startUpdateLocation(final Context cntx) { 44 try { 45 if (fusedLocationClient != null) { 46 fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null); 47 } 48 } catch (IllegalArgumentException ex) { 49 //GPSプロバイダなし 50 synchronized (this) { 51 lastLoc = null; 52 } 53 54 } 55 } 56 /** 57 * 位置情報取得終了. */ 58 public final void stopUpdateLocation() { 59 try { 60 if (fusedLocationClient != null) { 61 fusedLocationClient.removeLocationUpdates(this); 62 } 63 } catch (IllegalArgumentException ex) { 64 return; 65 } 66 } 67 /** 68 * locationのコールバックを受け取る. */ 69 private void createLocationCallback() { 70 locationCallback = new LocationCallback() { 71 @Override 72 public void onLocationResult(LocationResult locationResult) { 73 super.onLocationResult(locationResult); 74 synchronized (this) { 75 lastLoc = locationResult.getLastLocation(); 76 DebugLog.out("loc", lastLoc.toString()); 77 } 78 } 79 }; 80 } 81 82} 83 84
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。