Sid*_*rth 5 android android-maps android-location
我正在尝试创建一个更新当前gps位置的后台服务.我正在NullPointerException排队LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
HomeActivity推出了一项服务
startService(new Intent(getApplicationContext(), ForHire.class));
Run Code Online (Sandbox Code Playgroud)
Service(ForHire)创建TimerTask更新
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.
}
Run Code Online (Sandbox Code Playgroud)
第一个问题是我得到了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>
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
编辑:Values of KM20TIME = 5000(5秒)和KM20DISTANCE = 1(1米).除了下面的修理,我走出了我的房子,启用了GPS,从阳台的一个角落走到另一个角落.我注意到我的gps(LSB)随着我每5秒从一个角落走到另一个角落而改变.
Sam*_*Sam 11
您最早可以打电话的new Updates(getUpdatesNow);是服务onCreate()方法.原因很简单,getSystemService()需要一个在进入之前不存在的有效上下文onCreate().
尝试:
private Timer getUpdatesNow;
private Updates updates;
@Override
public void onCreate() {
...
getUpdatesNow = new Timer();
updates = new Updates(getUpdatesNow);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8719 次 |
| 最近记录: |