1

私は Android アプリケーションを開発しており、GPS を介して 10 分ごとに位置を追跡するサービスを使用しています。しかし、ロケーション リスナーをタイマー タスクに配置すると、例外がスローされます。

を呼び出していないスレッド内にコードを配置することはできませんlooper.prepare()

誰かがこの問題について何か洞察を持っていますか?

4

2 に答える 2

1

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();
于 2011-02-07T13:52:08.807 に答える
0

この方法は簡単で、UI スレッドを更新できます。

      new CountdownTimer(30000, 1000) { 

    public void onTick(long millisUntilFinished) { 
        mTextField.setText("seconds remaining: " + millisUntilFinished / 1000); 
    } 

    public void onFinish() { 
        mTextField.setText("done!"); 
    } 
 }.start(); 
于 2011-02-07T13:40:15.197 に答える