質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
GPS

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

1598閲覧

FusedLocationProviderClientによるcallbackが返ってこない現象

Zodiarc

総合スコア19

GPS

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2018/10/24 07:12

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

自己解決いたしました。

ソースコードは問題ありませんでした。
FusedLocationProviderClientのAPI提供元がgoogle play開発者サービスから
提供されているものなので
そのgoogle play開発者サービス自体のバージョンが古いものでした。
(端末が外部ネットにつながっていないものなので・・・)

更新しましたら問題なく位置情報が取得できておりました。

投稿2018/10/25 06:52

Zodiarc

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

このinstanceの生成が違っているのではないでしょうか

fusedLocationClient = new FusedLocationProviderClient(cntx);

.

LocationServicesによるとリンク内容

getFusedLocationProviderClient(Activity activity)

Create a new instance of FusedLocationProviderClient for use in an Activity.

とあります

FusedLocationProviderClient client = LocationServices.getFusedLocationProviderClient(this);

リンク内容
リンク内容
リンク内容

投稿2018/10/25 01:17

aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zodiarc

2018/10/25 01:58

回答ありがとうございます。 早速試してみましたが状況は変わらず・・・ fusedLocationClient = LocationServices.getFusedLocationProviderClient(cntx); 上記のような形で直してみました また7.0や8.0で動いてはいるのでなぜなのか不明です・・・
aja

2018/10/25 03:01

それは実機でのテストでしょうか?エミュレータではないですか
Zodiarc

2018/10/25 03:09 編集

実機ですね いろいろな設定をみる限り そもそも位置情報のリクエストもアプリ上から送っておらず 最新の位置情報リクエストにアプリが表示されていません
aja

2018/10/25 06:16

コード全てをもう一度見直して見た方がいいような気がします インスタンスから違っていたので
Zodiarc

2018/10/25 06:55

ありがとうございます。 自己解決いたしました。 はい、コードの見直しもして開発していきます。(おそらくまだ潜んでいるバグがあるかと思うので)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問