我正在尝试创建一个后台服务来更新当前的GPS位置。在这一行代码LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
中,我遇到了一个NullPointerException
。
HomeActivity启动了该服务。
startService(new Intent(getApplicationContext(), ForHire.class));
服务(ForHire)创建一个计时器任务更新
public class ForHire extends Service {
...
private Timer getUpdatesNow = new Timer();
private Updates updates = new Updates(getUpdatesNow);
@Override
public void onCreate() {
...
getUpdatesNow.schedule(updates, God.KM20TIME);
Log.v("Taxeeta", "Notification created");
}
private class Updates extends TimerTask implements LocationListener {
private Timer getUpdatesNow;
public Updates(Timer newGetUpdatesNow) {
super();
getUpdatesNow = newGetUpdatesNow;
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
God.KM20TIME, God.KM20DISTANCE, (LocationListener) this);
}
public void run() {
...
//do some cleanup
}
@Override
public void onLocationChanged(Location location) {
Log.v("Taxeeta", "Location changed");
// do a update of the current location.
}
首先有一个问题是我出现了NullPointerException异常。
第二个问题是,如果我注释掉这两行代码:LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, God.KM20TIME, God.KM20DISTANCE, (LocationListener) this);
onLocationChanged方法就不会被调用。
我的清单文件:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<application ...>
...
<uses-library android:name="com.google.android.maps" />
</application>
我在这里缺少什么?
编辑: KM20TIME的值为5000(5秒)
,KM20DISTANCE的值为1(1米)
。除了下面的修复之外,在我的房子走出去后,启用GPS并从阳台的一个角落走到另一个角落。我注意到当我从一个角落走到另一个角落时,我的GPS(LSB)每5秒钟变化一次。
God.KM20TIME
和God.KM20DISTANCE
是什么,但对于第一个修复来说这并不重要。不过你是否在可以接收GPS信号的位置呢?(我必须走到户外……) - SamrequestLocationUpdates()
时,您从未得到位置,因为这是启动更新的行。但我看不出为什么您现在不应该得到更新... 其他 GPS 应用程序在您所在的位置是否工作,例如 Google 地图? - Sam