0

我对三星 Galaxy Tab (GT-P7310) 上的 GPS 组件有一个奇怪的问题:GPS 在 Google 地图中工作正常,但在我自己的应用程序中没有提供任何位置。虽然我的应用程序在我的三星 Galaxy S2 上运行良好。

我这样调用位置服务:

LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Location currentLocation = locationManager.getLastKnownLocation(locationManager.getBestProvider(new Criteria(), false));
// Constantly update the location
locationManager.requestLocationUpdates(locationManager.getBestProvider(new Criteria(), false), 0, 0, listener);

但我得到的只是null位置,并且永远不会调用回调侦听器。

平板电脑运行的是带有 CyanogenMod 10.1-20130512-UNOFFICIAL-p5wifi 的 Android 4.2.2。位置访问已打开(否则 Google 地图也无法使用)。

我的应用在其清单中设置了以下权限:

  • ACCESS_FINE_LOCATION
  • ACCESS_COARSE_LOCATION
  • 互联网

任何想法,为什么我在这个设备上没有位置?

4

1 回答 1

1

解决方案: 您可以使用GPS而不是通过确定标准来选择最佳提供商。

例子:

代替

    Location currentLocation = locationManager.getLastKnownLocation(locationManager.getBestProvider(new Criteria(), false));
// Constantly update the location
locationManager.requestLocationUpdates(locationManager.getBestProvider(new Criteria(), false), 0, 0, listener);

    Location currentLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
// Constantly update the location
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);

解释:

根据您的应用程序的用例,您可以选择特定的位置提供程序,即LocationManager.GPS_PROVIDERLocationManager.NETWORK_PROVIDER

或者,您可以提供一些输入标准,例如准确性、功率要求、货币成本等,让 Android 决定最接近的匹配位置提供程序

    // Retrieve a list of location providers that have fine accuracy, no monetary cost, etc
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setCostAllowed(false);
String providerName = locManager.getBestProvider(criteria, true);
//and then you can make location update request with selected best provider
locationManager.requestLocationUpdates(providerName, 0, 0, listener); 

查看如何使用 locationmanager如何指定 Criteria以及getBestProvider 方法如何工作以供参考

我希望它会有所帮助!

于 2013-05-27T05:12:33.420 回答