私は Android アプリケーションを開発しており、GPS を介して 10 分ごとに位置を追跡するサービスを使用しています。しかし、ロケーション リスナーをタイマー タスクに配置すると、例外がスローされます。
を呼び出していないスレッド内にコードを配置することはできません
looper.prepare()
。
誰かがこの問題について何か洞察を持っていますか?
私は Android アプリケーションを開発しており、GPS を介して 10 分ごとに位置を追跡するサービスを使用しています。しかし、ロケーション リスナーをタイマー タスクに配置すると、例外がスローされます。
を呼び出していないスレッド内にコードを配置することはできません
looper.prepare()
。
誰かがこの問題について何か洞察を持っていますか?
10 分ごとに locationUpdate を受信するサービスを開始する必要はありません。代わりに、次のようにします。
mLocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 600000, 0, mLocListener);
これにより、10分ごとにリスナーに更新が自動的に送信されます
Looper のようなエラーが発生したとき。つまり、メイン UI ワーカー スレッド以外から何かを行うことは許可されていません。
あなたが実行していて、このエラーが発生しているコードは何ですか。メイン UI スレッドからコードを実行します。または、メイン スレッドによってメイン クラスに Handler オブジェクトを作成します。
Handler mHandler = new Handler();
次に、他のスレッドのいずれかで、このようなことを行います
new Thread(new Runnable(){ public void run(){
// any of your code
mHandler.post(new Runnable(){public void run(){
// the code giving you error Looper
}});
}}).start();
この方法は簡単で、UI スレッドを更新できます。
new CountdownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();