J'ai un groupe de personnes signalant une erreur que je ne peux pas reproduire. Lorsque vous essayez d'ouvrir un MapView
, il indique que le getBestProvider
renvoie null et je sais que cela signifie qu'aucun fournisseur n'a été trouvé qui remplit mes critères ACCURACY_COARSE
Alors s'il y a N'y a-t-il pas de GPS alors il devrait tomber sur network or passive
Mais cela ne fait évidemment pas sur ces périphériques utilisateur. Qu'est-ce que cela signifie même que ce GPS est désactivé et il n'y a pas de connexion réseau?
J'ai essayé de tourner GPS et de mettre le téléphone dans le mode avion pour essayer de reproduire le problème, mais j'ai toujours pu ouvrir le MapView sans la fermeture de force, donc je ne sais pas comment gérer ce problème.
locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE);
geocoder = new Geocoder(this);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
List<String> lProviders = locationManager.getProviders(false);
for(int i=0; i<lProviders.size(); i++){
Log.d("LocationActivity", lProviders.get(i));
}
String provider = locationManager.getBestProvider(criteria, true); // null
long minTime = 60000;
float minDistance = 5;
locationManager.requestLocationUpdates(provider, minTime, minDistance, this);
erreur
Java.lang.RuntimeException: Unable to start activity ComponentInfo{ecm2.Android/ecm2.Android.LocationActivity}:
Java.lang.IllegalArgumentException: provider==null
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2663)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2679)
at Android.app.ActivityThread.access$2300(ActivityThread.Java:125)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:2033)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:123)
at Android.app.ActivityThread.main(ActivityThread.Java:4627)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:521)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:860)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:618)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.IllegalArgumentException: provider==null
at Android.location.LocationManager.requestLocationUpdates(LocationManager.Java:625)
at ecm2.Android.LocationActivity.onCreate(LocationActivity.Java:142)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1047)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2627)
androidmanifest.xml
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION"/>
MapSactivity.java
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (permissions.length == 1 &&
permissions[0] == Android.Manifest.permission.ACCESS_FINE_LOCATION &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.checkSelfPermission(this, Android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
mMap.setMyLocationEnabled(true);
} else {
// Permission was denied. Display an error message.
}
}
MapSactivity.java/oncreate()===
if (ContextCompat.checkSelfPermission(this, Android.Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
} else {
ActivityCompat.requestPermissions(this,new String[]{Android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
ce travail pour moi;