我在HTC Desire S上玩GPS,制作了一个非常小的地图应用程序。它工作得非常好,直到我偶然发现this app。 我再次卸载它,现在我的GPS不再工作了。我知道有修复时间,但
locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
ALWAYS返回true,应用程序不再请求位置更新。
GPSMapTrackerService.java:
package net.hobbycoder.android.gpsmap;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.widget.Toast;
public class GPSMapTrackerService extends Service implements LocationListener {
private Resources res;
private FileManager fileManager;
private LocationManager locManager;
private boolean showNotification = true;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
res = getResources();
fileManager = new FileManager(getApplicationContext());
locManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
//GPS on?
if(!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
Toast.makeText(this, res.getString(R.string.noGPSText), Toast.LENGTH_LONG).show();
showNotification = false;
stopSelf();
}
else{
showNotification = true;
}
}
@Override
public void onStart(Intent intent, int startID) {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
if(showNotification)
Toast.makeText(this, res.getString(R.string.startedText), Toast.LENGTH_SHORT).show();
}
@Override
public void onDestroy() {
locManager.removeUpdates(this);
if(showNotification)
Toast.makeText(this, res.getString(R.string.stoppedText), Toast.LENGTH_SHORT).show();
}
public void onLocationChanged(Location loc) {
fileManager.write(loc.getLatitude() + ":" + loc.getLongitude() + ";");
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
似乎位置卡住了,因为我的时钟部件下的文字说我在纽约,但我在德国。
This app也无效,所以问题不应出现在我的代码中。
希望任何人都可以提供帮助:(
答案 0 :(得分:0)
Service.onStart()已被弃用,如果您阅读首选的Service.onStartCommand()文档,您会发现根据您的API onStart()可能甚至无法调用。
尝试将onStart()更改为onStartCommand():
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
if(showNotification)
Toast.makeText(this, res.getString(R.string.startedText), Toast.LENGTH_SHORT).show();
}
你永远不会在任何的被覆盖方法中调用super
函数。更新所有这些(除了无效的onBind()):
@Override
public void onCreate() {
super.onCreate();
...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
if(showNotification)
Toast.makeText(this, res.getString(R.string.startedText), Toast.LENGTH_SHORT).show();
return super.onStartCommand(intent, flags, startId);
}
// etc, etc
答案 1 :(得分:0)
尝试使用GPS Status & Toobox应用清除GPS数据并重新下载。我目前没有应用程序,但它位于菜单选项中的某个位置。