web-dev-qa-db-fra.com

GetBestProvider de LocationManager Renvoie NULL

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)
23
tyczj

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;

6
Dekel Dahan