如何在Timer内部使用LocationManager?

时间:2014-04-05 08:53:23

标签: android timer

在我的应用程序中我有一个后台服务器和内部服务器类我有计时器和内部计时器我有一个locationManager来查找位置:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

                    LocationListener locationListener = new MyLocationListener();
                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER, 5000, 10,
                            locationListener); 

但在这里我收到了这个错误:

java.lang.runtimeexception can't create handler inside thread that has not called looper.prepare();

我的问题在这里如何在timer内部使用locationManager?

3 个答案:

答案 0 :(得分:2)

使用runOnUiThread时,使用Activity查看后台服务不同这可能是活动时要小心,或者如果你在Service类中使用线程,你可以这样做: 内部服务类写这个:

static Activity ac;

    public static void setActivity(Activity a) {
        ac = a;

    }

并在您的活动类中执行此操作:

MyService.setActivity(this);

现在这个帖子就像这样:

(ac).runOnUiThread(new Runnable() {

    @Override
 public void run() {});

我强烈建议你做我喜欢做的事。

答案 1 :(得分:1)

如果您不知道Looper线程是什么,那么异常消息可能看起来很神秘,但它基本上意味着它所说的内容:您无法创建处理程序(或包含处理程序的任何对象)一个不是Looper的线程。定时器线程不是Loopers。 Android中的许多内容只能在UI线程上创建,这是一个Looper。

尝试使用LocationListener" inside"无论如何,计时器并没有多大意义。 LocationListener的方法由系统调用,而不是由您的代码调用。我建议搜索和阅读事件驱动的编程

答案 2 :(得分:0)

((Activity) getBaseContext()).runOnUiThread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

                    LocationListener locationListener = new MyLocationListener();
                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER, 5000, 10,
                            locationListener); 

            }
        });