我一直在为演示应用程序开发定位服务。我正在为网络和 GPS 设置一个监听器(我知道这可以用一个来完成,但我有非常基本的 java 并且发现这更容易使用)。无论如何,我想注册 GPS 更新并启动计时器,如果我得到修复我想重新启动计时器并继续收听。但是,如果计时器关闭,我想注册网络更新。
到目前为止的问题是当计时器过去时,我尝试使用 mLLocationM.request 在我的 timerTask 的 run() 中注册网络更新 .... 我得到一个异常。
我认为这是一个线程问题,并且正在寻找解决它的最基本方法,以避免陷入处理程序中。
class GpsTimer extends TimerTask{
@Override
public void run() {
Log.d(TAG, "running");
mLocationM.requestLocationUpdates
(LocationManager.NETWORK_PROVIDER, 2 * 60 * 1000, 0, mNetworkListener);
}
}
我认为这就是导致问题的原因
03-17 16:33:38.528: E/AndroidRuntime(29913): FATAL EXCEPTION: Thread-1364
03-17 16:33:38.528: E/AndroidRuntime(29913): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
03-17 16:33:38.528: E/AndroidRuntime(29913): at android.os.Handler.<init>(Handler.java:121)
03-17 16:33:38.528: E/AndroidRuntime(29913): at android.location.LocationManager$ListenerTransport$1.<init>(LocationManager.java:183)
03-17 16:33:38.528: E/AndroidRuntime(29913): at android.location.LocationManager$ListenerTransport.<init>(LocationManager.java:183)
03-17 16:33:38.528: E/AndroidRuntime(29913): at android.location.LocationManager._requestLocationUpdates(LocationManager.java:661)
03-17 16:33:38.528: E/AndroidRuntime(29913): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:486)
03-17 16:33:38.528: E/AndroidRuntime(29913): at com.sblyit.finder.LocationService$GpsTimer$1.run(LocationService.java:150)
03-17 16:33:38.528: E/AndroidRuntime(29913): at java.lang.Thread.run(Thread.java:856)