我有以下代码并且它不好,因为有时GPS需要很长时间
如何执行以下操作:
我可以使用我自己的逻辑使用时间或Thread.sleep这样做,但我认为可能有更稳健的方式
// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
locationCallback(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
答案 0 :(得分:10)
没有标准方法,您必须在以下帮助下自行完成:
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
//Do what you need if enabled...
}else{
//Do what you need if not enabled...
}
清单中的此权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
作为建议,如果未启用GPS,通常标准指定弹出位置设置活动,以便用户可以专门启用它...
希望这有帮助。
问候!
答案 1 :(得分:8)
只需使用此功能,即可查看GPS
可用性
LocationManager mlocManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);;
boolean enabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
答案 2 :(得分:1)
认为您可以使用我的答案中的代码:Location servise GPS Force closed
它为您提供了GPS首次修复和位置更改的回调方法,非常方便。如果GPS需要太长时间才能获得第一次修复,这也可以很容易地将GPSTracker的实现更改为切换到网络。