为什么我的gps被“挂断了?”

时间:2011-10-11 01:32:37

标签: android gps

我正在尝试实现一个gps位置监听器,它将继续保持并在后台不断更新。我意识到这是不好的做法,但我这样做是为了测试目的。现在我有一个使用getGPS()调用的位置监听器。它也可以用killGPS()杀死。

当我走动时它完美地工作,我点击我的获取gps按钮,从我的位置参数获取纬度和经度

    GPSActivity.getGPS();
    loc_listener = GPSActivity.loc_listener;
     locationManager = (LocationManager)
     getSystemService(LOCATION_SERVICE);
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
     0, 0, loc_listener);
    location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

然而在后台,有时它会说我还在我的公寓,即使我已经出去3小时! 为什么我的位置监听器不会自动更新,即使它每隔10分钟就会找到一个新位置?

由于

package com.cellphone;

import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class GPSActivity extends Activity{
    public static LocationListener loc_listener = null;

    public static void getGPS() {
        if (loc_listener == null) {
            loc_listener = new LocationListener() {

                @Override
                public void onStatusChanged(String provider, int status,
                        Bundle extras) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onProviderEnabled(String provider) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onProviderDisabled(String provider) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onLocationChanged(Location location) {
                    // TODO Auto-generated method stub

                }
            };
        }

    }

    public static void killGPS(LocationManager locationManager) {
        if (locationManager != null && loc_listener != null) {
            locationManager.removeUpdates(loc_listener);
        }
    }

}

2 个答案:

答案 0 :(得分:1)

我建议只使用Activity来显示信息并在后台使用一个包含部分唤醒锁定的服务,这样即使设备尝试进入睡眠模式它也会继续运行。然后在Activity中使用broadcastreceiver从具有该位置的服务获取更新。

无论您如何管理它,您都需要保持唤醒锁定以确保其继续运行。

检查此链接:
http://developer.android.com/reference/android/os/PowerManager.html

您必须持有权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />

对于唤醒锁:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");

//you would acquire in onStart() or on your getGPS() or somewhere else if you like.
mWakeLock.acquire();
// you would release in your onStop() or your onDestroy() or on your killGPS()
mWakeLock.release();

答案 1 :(得分:0)

对于位置轮询器,这里很简单&amp;工作实例: https://github.com/commonsguy/cwac-locpoll

您可以通过在“应用程序”上下文中添加功能来保持应用的状态。因此,如果app未处于活动状态,位置轮询器可以知道app-state并跳过gps操作。