我正在尝试实现一个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);
}
}
}
答案 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操作。