サービスからの位置情報取得

1,509 views
Skip to first unread message

iwata naoki

unread,
Sep 30, 2010, 8:04:12 AM9/30/10
to Android-SDK-Japan
いわたんと申します.

サービスから位置情報を取得しようとしています.
位置情報はサービスを実装しているクラスとは別に位置情報取得用のクラスを実装しています.

Activityを実装したクラスから位置情報取得用クラスを使用した際には正常に動作したのですが,
サービスを実装したクラスから位置情報取得用クラスを使用すると,LocationManager.requestLocationUpdates()
を実行するとそこで位置情報取得用クラスが停止してしまいます.
ソースとしては以下のような擬似コードで実装をしています.

Log.d("location", "step 1");
this.mLocationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER,
0, 0, this);
Log.d("location", "step 2");

Activityを実装したクラスからは位置情報取得用クラスを使用した際には,
DDMSに"step 1"と"step 2"が出力されました.

サービスを実装したクラスから位置情報取得用クラスを使用した際には,
DDMSでログの"step 1"は出力されるのですが,"step 2"が出力されませんでした.
その際にサービスを呼び出したActivityにログを出力するボタンを実装したところそちらは動作しました.

原因が分からず困っているのですが,どなたか代替案や解決策をご存知のかたはご教示お願い致します.

Hideki Yoshino

unread,
Sep 30, 2010, 1:47:13 PM9/30/10
to android-...@googlegroups.com
下記のようなメッセージがでてませんか。
Can't create handler inside thread that has not called Looper.prepare()
requestLocationUpdatesはLooper.loopないからコールしないといけません。

解決策として、Looper.loopを自分でクラス内でクリエートする必要があります。
自分はThread内で以下のようにしています。

class LocationListenerThread extends Thread {
  public void run() {
 Looper.prepare();
 mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
1000,
0,
mLocationListener);
Looper.loop();
  }
}

2010/9/30 iwata naoki <a.toka...@gmail.com>:

> --
> このメールは Google グループのグループ「Android-SDK-Japan」の登録者に送られています。
> このグループに投稿するには、android-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-sdk-ja...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-sdk-japan?hl=ja からこのグループにアクセスしてください。
>
>

--
Hideki Yoshino
hideki....@gmail.com

iwata naoki

unread,
Sep 30, 2010, 9:01:37 PM9/30/10
to Android-SDK-Japan
いわたんです.

エラーは見落としていました.
Looper.loopを実装したところ無事にステータスバー内にGPSマークが表示され,
うまく動作いたしました.

requestLocationUpdatesはLooper.loopからコールしないといけないとは知りませんでした.

ありがとうございます.

On 10月1日, 午前2:47, Hideki Yoshino <hideki.yosh...@gmail.com> wrote:
> 下記のようなメッセージがでてませんか。
> Can't create handler inside thread that has not called Looper.prepare()
> requestLocationUpdatesはLooper.loopないからコールしないといけません。
>
> 解決策として、Looper.loopを自分でクラス内でクリエートする必要があります。
> 自分はThread内で以下のようにしています。
>
> class LocationListenerThread extends Thread {
>   public void run() {
>  Looper.prepare();
>  mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
> 1000,
> 0,
> mLocationListener);
> Looper.loop();
>   }
>
> }
>
> 2010/9/30 iwata naoki <a.tokai.w...@gmail.com>:
>
>
>
>
>
> > いわたんと申します.
>
> > サービスから位置情報を取得しようとしています.
> > 位置情報はサービスを実装しているクラスとは別に位置情報取得用のクラスを実装しています.
>
> > Activityを実装したクラスから位置情報取得用クラスを使用した際には正常に動作したのですが,
> > サービスを実装したクラスから位置情報取得用クラスを使用すると,LocationManager.requestLocationUpdates()
> > を実行するとそこで位置情報取得用クラスが停止してしまいます.
> > ソースとしては以下のような擬似コードで実装をしています.
>
> > Log.d("location", "step 1");
> > this.mLocationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER,
> > 0, 0, this);
> > Log.d("location", "step 2");
>
> > Activityを実装したクラスからは位置情報取得用クラスを使用した際には,
> > DDMSに"step 1"と"step 2"が出力されました.
>
> > サービスを実装したクラスから位置情報取得用クラスを使用した際には,
> > DDMSでログの"step 1"は出力されるのですが,"step 2"が出力されませんでした.
> > その際にサービスを呼び出したActivityにログを出力するボタンを実装したところそちらは動作しました.
>
> > 原因が分からず困っているのですが,どなたか代替案や解決策をご存知のかたはご教示お願い致します.
>
> > --
> > このメールは Google グループのグループ「Android-SDK-Japan」の登録者に送られています。
> > このグループに投稿するには、android-...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-sdk-ja...@googlegroups.com にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-sdk-japan?hl=jaからこのグループにアクセスしてください。
>
> --
> Hideki Yoshino
> hideki.yosh...@gmail.com
Reply all
Reply to author
Forward
0 new messages