好的问题是,当我使用下面的代码时,使用ACCURACY_COARSE,一切正常,除了位置不准确到我所在的位置。
// Creating a criteria object to retrieve provider
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
// Getting LocationManager object from System Service
// LOCATION_SERVICE
LocationManager locationManager = (LocationManager) getActivity().getApplicationContext()
.getSystemService(LOCATION_SERVICE);
// Getting the name of the best provider
String provider = locationManager.getBestProvider(criteria, true);
// Getting Current Location
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
onLocationChanged(location);
}
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
// Get current location Latitude and Longitude
double lat = location.getLatitude();
double lng = location.getLongitude();
但是当我使用这段代码时,我会从location.getLatitude()获得nullpointerexception;
// Creating a criteria object to retrieve provider
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
// Getting LocationManager object from System Service
// LOCATION_SERVICE
LocationManager locationManager = (LocationManager) getActivity().getApplicationContext()
.getSystemService(LOCATION_SERVICE);
// Getting the name of the best provider
String provider = locationManager.getBestProvider(criteria, true);
// Getting Current Location
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
onLocationChanged(location);
}
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
// Get current location Latitude and Longitude
double lat = location.getLatitude();
double lng = location.getLongitude();
问题在于设定准确性的问题。
当我使用它时,我得到一个NullPointerException
// Creating a criteria object to retrieve provider
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
当我使用它时一切正常。
// Creating a criteria object to retrieve provider
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
哦,这是我的明显权限
<permission
android:name="com.where.common.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.where.common.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
答案 0 :(得分:0)
我在Accuracy值上找到了这个资源,可能有助于确定使用它们的方式/方式。这可能会让您避免遇到的问题。似乎setAccuracy期望COURSE或FINE的值,而有其他方法(setVerticalAccuracy,setHorizontalAccuracy和setSpeedAccuracy)将接受ACCURACY_LOW,MEDIUM和HIGH。但是,这些工作方式略有不同。 Accuracy Info
答案 1 :(得分:0)
当您申请Criteria.ACCURACY_FINE
的位置时,可能需要更多时间才能获得该位置。因此,当您尝试location.getLatitude()
时,您将获得NPE。
我按照here所述的Location
使用google services
。这样当检测到位置时,您将获得回调,然后您可以访问其坐标。