GPS Android中的LocationManager RequestLocationUpdate()
我已经开发了一个应用程序作为服务来处理基本的HTTP请求。当手机收到HTTP Post请求(如:GPS Android中的LocationManager RequestLocationUpdate(),android,gps,looper,Android,Gps,Looper,我已经开发了一个应用程序作为服务来处理基本的HTTP请求。当手机收到HTTP Post请求(如:HTTP://IP:port/gps/on)时,应按如下方式向gps侦听器注册: lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,200,0,locationListener); 但是,由于此代码存在于处理程序中,我得到以下错误: 8.614: E/AndroidRuntime(21211): java.lang.RuntimeExc
HTTP://IP:port/gps/on
)时,应按如下方式向gps侦听器注册:
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,200,0,locationListener);
但是,由于此代码存在于处理程序中,我得到以下错误:
8.614: E/AndroidRuntime(21211): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
06-18 12:34:58.614: E/AndroidRuntime(21211): at android.os.Handler.<init>(Handler.java:121)
06-18 12:34:58.614: E/AndroidRuntime(21211): at android.location.LocationManager$ListenerTransport$1.<init>(LocationManager.java:183)
06-18 12:34:58.614: E/AndroidRuntime(21211): at android.location.LocationManager$ListenerTransport.<init>(LocationManager.java:183)
06-18 12:34:58.614: E/AndroidRuntime(21211): at android.location.LocationManager._requestLocationUpdates(LocationManager.java:661)
06-18 12:34:58.614: E/AndroidRuntime(21211): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:486)
06-18 12:34:58.614: E/AndroidRuntime(21211): at com.example.devicecommunication.ConnectService$HttpFileHandler.registerGPS(ConnectService.java:4281)
06-18 12:34:58.614: E/AndroidRuntime(21211): at com.example.devicecommunication.ConnectService$HttpFileHandler.handle(ConnectService.java:700)
06-18 12:34:58.614: E/AndroidRuntime(21211): at org.apache.http.protocol.HttpService.doService(HttpService.java:243)
06-18 12:34:58.614: E/AndroidRuntime(21211): at org.apache.http.protocol.HttpService.handleRequest(HttpService.java:187)
06-18 12:34:58.614: E/AndroidRuntime(21211): at com.example.devicecommunication.ConnectService$WorkerThread.run(ConnectService.java:4987)
然后在您的服务类中使用:
private void LocationLog() {
new LocationLog(context, latString, lngString).start();
Log.d(latString, getClass().getSimpleName());
Log.d(lngString, getClass().getSimpleName());
retrieveUserId();
sendData(user_id);
}
然后在您的服务类中使用:
private void LocationLog() {
new LocationLog(context, latString, lngString).start();
Log.d(latString, getClass().getSimpleName());
Log.d(lngString, getClass().getSimpleName());
retrieveUserId();
sendData(user_id);
}
您得到的错误是因为您试图从需要主线程的后台线程运行某些内容。您提供的代码没有显示此线程的设置,但要将位置设置回UI/主线程,您应该能够使用runOnUiThread创建一个新的runnable,如下所示
private Runnable runnable = new Runnable() {
public void run() {
runOnUiThread(new Runnable() {
public void run(){
//set up your listener here
}
});
}
另一个评论是,您提到了GPS、UI/主线程操作和HTTP post。听起来这可以使用
AsyncTask
进行设置。我必须看到更多的代码,但如果你没有仔细研究,那可能会让你的生活更轻松 您遇到的错误是因为您试图从需要主线程的后台线程运行某些内容。您提供的代码没有显示此线程的设置,但要将位置设置回UI/主线程,您应该能够使用runOnUiThread创建一个新的runnable,如下所示
private Runnable runnable = new Runnable() {
public void run() {
runOnUiThread(new Runnable() {
public void run(){
//set up your listener here
}
});
}
另一个评论是,您提到了GPS、UI/主线程操作和HTTP post。听起来这可以使用
AsyncTask
进行设置。我必须看到更多的代码,但如果你没有仔细研究,那可能会让你的生活更轻松 在我的Post处理程序中,我向我的服务传递了一个额外的字符串,并再次启动了服务。在onStartCommand()中,我从intent中获取额外的命令,然后调用requestLocationUpdates(),因此这是在主线程上完成的。这就解决了我的要求。谢谢大家的帮助 在我的Post处理程序中,我向我的服务传递了一个额外的字符串,并再次启动了服务。在onStartCommand()中,我从intent中获取额外的命令,然后调用requestLocationUpdates(),因此这是在主线程上完成的。这就解决了我的要求。谢谢大家的帮助 你在哪里打这个电话?这通常只是意味着您需要使用UI线程,而不是在后台执行操作。需要查看更多代码,我猜您将requestLocationUpdates放在了处理程序或某种类型中的什么位置。显示更多代码。@Rarw您好,谢谢您的回复。我有一个线程,它创建了一个处理所有请求的类。在POST处理程序中,我需要向listener注册GPS。这是我的要求。你在哪里打电话?这通常只是意味着您需要使用UI线程,而不是在后台执行操作。需要查看更多代码,我猜您将requestLocationUpdates放在了处理程序或某种类型中的什么位置。显示更多代码。@Rarw您好,谢谢您的回复。我有一个线程,它创建了一个处理所有请求的类。在POST处理程序中,我需要向listener注册GPS。这是我的要求,谢谢。。这是否意味着您要将其带到UI线程?我应该在哪里退出这里的活套?谢谢。。这是否意味着您要将其带到UI线程?我应该在哪里退出此活套?我想我无法从服务中使用runOnUiThread()。请让我知道你的建议。我认为这个说法不是100%正确runOnUiThread
是一种活动
方法,因此我敢打赌,只要您将适当的上下文传递给您的服务,您就可以访问它。但是,如果我错了,以及如何从两者访问UI线程,我想我不能从服务中使用runOnUiThread()。请让我知道你的建议。我认为这个说法不是100%正确runOnUiThread
是一种活动
方法,因此我敢打赌,只要您将适当的上下文传递给您的服务,您就可以访问它。但是,如果我错了,如何从两者访问UI线程。