问题
I am developing an android application and I am using a service that tracks location via GPS every 10 minutes. But when I put the location listener in a timer task, it throws an exception:
Cannot put code inside thread that has not called
looper.prepare()
.
Does anyone have any insight on this problem?
回答1:
You need not to start a service for recieving locationUpdate every 10 min instead do something like this
mLocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 600000, 0, mLocListener);
this will automatically send update to the listener every 10 min
When ever you got error like Looper . that mean you are not allowed to do something from other then Main UI Worker thread.
What so code you are running and getting this error . execute the code from Main UI Thread. or create a Handler object in your main class by Main Thread
Handler mHandler = new Handler();
Then in any of your other thread do something like this
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();
回答2:
This method is easy and can update UI thread:
new CountdownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
来源:https://stackoverflow.com/questions/4921916/track-gps-at-every-10-minutes-using-timer-in-android