【发布时间】:2013-03-26 01:50:07
【问题描述】:
使用Criteria.ACCURACY_COARSE 我得到了位置,但它不准确。我想使用 GPS Criteria.ACCURACY_FINE,但没有调用 onLocationChanged(Location location) 方法。
我做了一些研究,但不知道为什么。
StackOverflow 上有很多类似的问题,但不幸的是我找不到能解决我的问题的问题。
以下是我的源代码:
private void locationInformationSettings(){
Criteria criteria= new Criteria();;
criteria.setAccuracy(Criteria.ACCURACY_FINE); //using Criteria.ACCURACY_COARSE works
//criteria.setPowerRequirement(Criteria.POWER_LOW);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
String providername = locationManager.getBestProvider(criteria, true);
myLocationListener = new MyLocationListener();
locationManager.requestLocationUpdates(
providername, //LocationManager.GPS_PROVIDER,
Utils.MINIMUM_TIME_BETWEEN_UPDATES,
Utils.MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
myLocationListener
);
}
private class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
locLongitude = location.getLongitude();
locLatitude = location.getLatitude();
String message = String.format(
"New Location \n Longitude: %1$s \n Latitude: %2$s",
locLongitude, locLatitude);
Toast.makeText(RecordActivity.this, message, Toast.LENGTH_LONG).show();
Log.e(TAG, "Location information received:(" + locLongitude + "," + locLatitude +")");
locationManager.removeUpdates(myLocationListener);
}
public void onStatusChanged(String s, int i, Bundle b) {
Toast.makeText(RecordActivity.this, "Provider status changed",
Toast.LENGTH_LONG).show();
}
public void onProviderDisabled(String s) {
Toast.makeText(RecordActivity.this,
"Provider disabled by the user. GPS turned off",
Toast.LENGTH_LONG).show();
}
public void onProviderEnabled(String s) {
Toast.makeText(RecordActivity.this,
"Provider enabled by the user. GPS turned on",
Toast.LENGTH_LONG).show();
}
}
清单文件权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
为什么使用网络提供商有效而 GPS 提供商无效?
我已经在我的设备设置中检查了 GPS 服务,并在 Android 4.3 和 Android 2.3.3 上进行了测试。
提前致谢
【问题讨论】:
-
而不是标准,为什么不直接使用 LocationManager.GPS_PROVIDER 请求位置更新,然后先看看它是否有效。
-
@HoanNguyen 正如您在评论中注意到的那样,我已经尝试过了,但它不起作用。
-
获取 GPS 位置不是立即的。您应该会在顶部托盘上看到试图修复的 GPS 图标..
-
@denis.solonenko 感谢您的提示。会尽量耐心等待结果。
-
@LazyNinja 不要试图在建筑物内获取 GPS 定位,到外面去 :)