我的代码段是:
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(mLocationManager.getProvider(LocationManager.GPS_PROVIDER) != null) {
mLocationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
}
mLocationManager.addTestProvider(LocationManager.GPS_PROVIDER,
"requiresNetwork" == "", "requiresSatellite" == "",
"requiresCell" == "", "hasMonetaryCost" == "",
"supportsAltitude" == "", "supportsSpeed" == "",
"supportsBearing" == "",
android.location.Criteria.POWER_LOW,
android.location.Criteria.ACCURACY_FINE);
location = new Location(LocationManager.GPS_PROVIDER);
mLocationManager.setTestProviderEnabled(
LocationManager.GPS_PROVIDER, true);
// mLocationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER,
// location);
location.setLatitude(FinalLatitudeIntArray[0]);
location.setLongitude(FinalLongitudeIntArray[0]);
mLocationManager.setTestProviderLocation(
LocationManager.GPS_PROVIDER, location);
我收到了错误:
java.lang.IllegalArgumentException: Provider "gps" unknown
at android.os.Parcel.readException(Parcel.java:1326)
at android.os.Parcel.readException(Parcel.java:1276)
at android.location.ILocationManager$Stub$Proxy.removeTestProviderEnabled(ILocationManager.java:1097)
at android.location.LocationManager.removeTestProviderEnabled(LocationManager.java:1130)
请帮我解决这个错误。 加上。 之前应用程序运行正常,但是当我重新启动系统时,应用程序开始显示错误。
答案 0 :(得分:3)
来自位置管理员的Android文档:
removeTestProvider() throws
IllegalArgumentException if no provider with the given name exists
因此,如果您在模拟器上进行测试,则可能已通过重新启动重置GPS的设置(尝试检查您的权限,DDMS再次启用它)。如果在设备上,您必须已禁用GPS(转到“设置”并启用GPS )。
编辑:找到相关内容:here。基本上,在模拟器中出现了一些似乎不稳定的事情。根据该主题的评论,请尝试使用Criteria.ACCURACY_FINE
代替LocationManager.GPS_PROVIDER
,例如:
LocationManager locationManager = (LocationManager)context.getSystemService( Context.LOCATION_SERVICE );
Criteria criteria = new Criteria();
criteria.setAccuracy( Criteria.ACCURACY_FINE );
String provider = locationManager.getBestProvider( criteria, true );
if ( provider == null ) {
Log.e( TAG, "No location provider found!" );
return;
}
浏览该帖子以获取更多信息。
答案 1 :(得分:1)
我遇到了同样的问题,因为现在有些设备没有GPS。一个好的方法是'varevarao'所提到的,但如果我使用条件方法,我也遇到了问题。在某些设备上,它仍会在'getBestProvider'处返回null(请参阅下面的代码)。
Criteria criteria = new Criteria();
criteria.setAccuracy( Criteria.ACCURACY_FINE );
String provider = locationManager.getBestProvider( criteria, false );
if ( provider == null ) {
criteria.setAccuracy( Criteria.ACCURACY_COARSE );
provider = locationManager.getBestProvider( criteria, true );
Log.d( "Function", "No location provider found!" );
return;
}
我这样做是为了解决它(见下面的代码)。不确定它是否是最好的方法,但它目前适用于我。它的工作原理是获取设备上可用的“位置提供者”列表,然后获取第一个(无所谓,因为我只是将它用于模拟位置)。
List<String> tmpProviders = locationManager.getAllProviders();
if (!tmpProviders.isEmpty() && tmpProviders.toArray()[0] != null && !tmpProviders.toArray()[0].toString().isEmpty() ) {
mocLocationProvider = tmpProviders.toArray()[0].toString();
} else {// your error goes here }