- ベストアンサー
GPSで取得した値を別のクラスで利用する方法
- Javaの初心者が、AndroidアプリケーションでGPSで取得した値を別のクラスで利用する方法を知りたいです。
- 具体的には、ロケーションリスナクラスで取得した緯度と経度の値を別のクラスで計算に利用する方法を教えてください。
- お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
えーと、前にも書いたとおりAndroidのことは知らないので外した意見になるかもしれませんが。 基本クラス名からすると位置情報のリスナークラスですよね? ということは、どこかでリスナーをシステムに登録する処理があるはずですよね? その登録しているコードをいじるというのはAndroidのアーキテクチャではやってはいけない、あるいは、設定で定義することなのでソースに手を入れられないなのでしょうか? 上記に問題が無いなら、そのリスナーのインスタンスの参照をアプリケーションでも持っておいて、その箇所で取得した参照からインスタンスにアクセスすれば位置情報が取得できるはずです。 もしその箇所をいじることができないなら、現在の位置情報リスナーを取得するメソッドはありませんか? もしあったならば、そのメソッドで取得したリスナーから位置情報が取り出せると思います。 リスナー登録の箇所はいじれない、リスナー取得メソッドも無い、というのであれば前回の私の回答は忘れてください。 そしてアプリケーション全体やアプリケーションの制御を現すクラスみたいなものがあって、そのインスタンスにはどこからもアクセスできるということはありませんか? そういったものも無いというのであれば私にはお手上げですが、アクセスできるのであればそのクラスに位置情報のセッター・ゲッターを設けて、リスナークラスでそのセッターを呼ぶという手があります。 # ごめんなさい、余り力になれなかったようです
その他の回答 (1)
- hitomura
- ベストアンサー率48% (325/664)
こんなかんじでゲッターを設定じゃだめですか? Androidは知らないんだけどリスナーにはインターフェースの実装以外は書いちゃだめでしたっけ? class SampleLocationListener implements LocationListener { private double latitude; private double longitude; public double getLatitude() { return latitude; } public double getLongitude() { return longitude; } public void onLocationChanged(Location lc) { latitude = (double) (lc.getLatitude()); longitude = (double) (lc.getLongitude()); } public void onProviderDisabled(String pv){} public void onProviderEnabled(String pv){} public void onStatusChanged(String pv, int status, Bundle ex){} }
お礼
回答ありがとうございます! 教えていただいた通りにロケーションリスナを入力し、外のクラスから SampleLocationListener sll = new SampleLocationListener(); double lt; lt = sll.getLatitude(); として緯度の値を取りに行きましたが、lt は常に 0.0 で、値を得ることができませんでした。 latitudeにGPS情報が入るのは、 public void onLocationChanged(Location lc) { latitude = (double) (lc.getLatitude()); longitude = (double) (lc.getLongitude()); } のメソッドの{}内のみで、その外にある public double getLatitude() { return latitude; } のlatitude には入力されないということでしょうか? もし原因がわかりましたら、回答いただけるとうれしいです。 よろしくお願いします。
お礼
回答ありがとうございます! >どこかでリスナーをシステムに登録する処理があるはずですよね? >その登録しているコードをいじるというのはAndroidのアーキテクチャではやってはいけない、あるいは、設定で定義することなのでソースに手を入れられないなのでしょうか? リスナの登録について、システムサービスのLocationManager を取得したうえで、 requestLocationUpdates()の第4引数に位置情報が変更された時に処理を行うリスナSampleLocationListenerを登録しています。下記のとおりです。 requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new SampleLocationListener()); だから、ソースに手は入れられないと思います。(回答になってますでしょうか?) >もしその箇所をいじることができないなら、現在の位置情報リスナーを取得するメソッドはありませんか?もしあったならば、そのメソッドで取得したリスナーから位置情報が取り出せると思います。 すいません、勉強不足でこのアドバイスは意味がよくわかりません。。。 2回も回答していただきありがとうございます! もう少し勉強してみます! もし何かアドバイスがあったらよろしくお願いします!