本教程似乎是最有前途的
这真是糟糕的代码。
我似乎只能得到此代码以返回0.0、0.0的GPS坐标,这不是很有用
那是因为,如果
getLastKnownLocation()碰巧返回一个位置,它将永远只有一个位置。不太可能这样做。
重写但仍无法在GPSTracker.java中工作的权限块:
这里有两个问题:
您不能从服务请求权限。
这不是真正的服务。该代码的作者选择创建一个扩展类,
Service
而该扩展类没有实际实现或正确使用服务。这是造成您的原因NullPointerException
,因为未正确初始化Context
。
有人可以在这里指出正确的方向吗?
把所有这些扔掉。
FWIW,这是我使用
LocationManagerAPI的示例应用程序。
食谱很简单:
步骤#1:
LocationManager通过调用
getSystemService(Context.LOCATION_SERVICE)some
获得一个
Context。我碰巧做了一个片段:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); template=getActivity().getString(R.string.url); mgr=(LocationManager)getActivity() .getSystemService(Context.LOCATION_SERVICE); }步骤#2:调用
requestUpdates(),传入实现的东西
LocationListener。就我而言,这恰好是片段本身:
@Override @SuppressWarnings({"MissingPermission"}) public void onStart() { super.onStart(); mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3600000, 1000, this); }步骤#3:在
onLocationChanged()您的中
LocationListener,对
Location您得到的进行一些操作,在我的情况下,执行
AsyncTask以获得天气预报:
@Override public void onLocationChanged(Location location) { new FetchForecastTask().execute(location); }步骤4:完成后致电
removeUpdates():
@Override @SuppressWarnings({"MissingPermission"}) public void onStop() { mgr.removeUpdates(this); super.onStop(); }就是这样(除了运行时权限之类的东西,我将其抽象为
AbstractPermissionsActivity)。
如果需要,可以将其
getLastKnownLocation()用作 优化 ,但不要依赖它。



