- ベストアンサー
Androidの定期的なGPS情報取得に関する質問
- Androidの定期的なGPS情報取得に関する質問について、活用方法や呼び出し方について詳しく知りたいです。
- 単一のActivityクラスから別クラスに移行するためにはどのようにすれば良いのか、具体的な手順を教えてください。
- 画面遷移がなくてもintentを使用する必要があるのか、それとも別の方法があるのか教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>重ねて質問して申し訳ないのですが、Activityを継承しないクラスでgetSystemService(LOCATION_SERVICE);を実行するにはどうしたら良いのでしょうか? 普通、こういう場合は、Activityではなく、サービス(Service)を継承して作成します。サービスは、GUIをもたずバックグラウンドで処理を実行するためのクラスです。このServiceクラスにはgetSystemServiceメソッドが用意されており、GPSを利用できます。 ActivityからはIntentというオブジェクトを生成し、これを使ってサービスを起動してやります。後は、サービスのクラスにあるスレッドにより処理が実行されます。このサービスから、呼び出し元のActivityに必要に応じて値を受け渡したりするには、BroadcastReceiverというクラスを利用します。 このあたりのサービスの基本については、ちょっと複数のクラスが複合的に動くのでややこしいです。ここですべて説明するのは少々大変なので、別途、勉強してみてください。 >また、作成したクラスに処理を実行させるには、onCreateの代わりにコンストラクタを作成し、処理を記述。呼び出し元のmainのAcctivityでGetGpsServiceのクラスをnewすれば実行される。という認識で合っていますでしょうか? そうですね、newすれば、それに応じたコンストラクタが実行され、そこで初期化が行えます。ただし、先に述べたServiceクラスの場合は、onCreateが使えますし、onStartといった開始時処理のメソッドなども用意されていますので通常はそちらを使います。
その他の回答 (1)
ちょっとプログラムの構造がわからないのでなんともいえないのですが……。いくつか確認を。 1. 実際に画面に表示されるActivityは別にあって、そこからGetGpsServiceが呼び出されるのですよね? それなのに、なぜActivityを継承しているのですか? どういう使い方をするのでしょうか。 2. サンプルでは、スレッドの実行はonCreateメソッドで行っているようですが、これはGetGpsServiceクラスではどこで実行しているのでしょうか。コンストラクタですか。あるいはスレッド実行用のメソッドを用意しているのですか。 とりあえず、この2点を確認下さい。先のサンプルでonCreateでスレッド処理が用意されているのは、これがActivityとして画面に表示されるクラスだからです。この際、onCreateが呼び出され、そこでスレッドが実行されます。が、GetGpsServiceは実際に画面に表示して使うActivityというわけではないのですよね? それなら、onCreateは呼ばれないでしょう。である以上、コンストラクタなどに処理を用意するか、あるいはスレッド起動用のメソッドを用意し、それを作成したインスタンスから呼び出す形にする必要があるでしょう。
補足
解答ありがとうございます。 1.おっしゃる通り、画面はmainのActivityのみで画面変遷はありません。 GetGpsServiceにActivityを継承させたのは、GetGpsService内の位置情報を取得するために記述した「 locationService_ = (LocationManager)getSystemService(LOCATION_SERVICE);」がActivityを継承してないとgetSystemService(LOCATION_SERVICE)が使用できないためです。 画面の無いActivityもあると聞いたので、こういう使い方をするのだと思いこんでいたのですが、違うみたいですね…。 2.onCreateは画面が表示されるクラスでないと呼び出されないのですね。 Activityを継承したクラスがnewされたらコンストラクタのように、必ず実行されるものだと勘違いしてました。 重ねて質問して申し訳ないのですが、Activityを継承しないクラスでgetSystemService(LOCATION_SERVICE);を実行するにはどうしたら良いのでしょうか? また、作成したクラスに処理を実行させるには、onCreateの代わりにコンストラクタを作成し、処理を記述。呼び出し元のmainのAcctivityでGetGpsServiceのクラスをnewすれば実行される。という認識で合っていますでしょうか?
お礼
やはりServiceを使うしか方法はないのですね。 以前、Serviceを使った方法でGPS取得を試したのですが、うまく動作しなかったため、今回参考にしたURLのように作成しました。 これは同一のActivity内で行う場合のみの、作成方法と考えたほうが良さそうですね。 Serviceについて、もう一度勉強しなおしてみます。 とても丁寧な解答ありがとうございました。