109 votes

Android webview géolocalisation

Je dois récupérer l'emplacement d'un utilisateur dans un fichier WebView . Je fais cela avec le Javascript suivant :

function getLocation() {
   navigator.geolocation.getCurrentPosition(displayLocation, handleError);
}

Mais la popup de demande d'autorisation ne s'ouvre jamais.

J'ai défini ces paramètres :

ws.setJavaScriptEnabled(true);
ws.setGeolocationEnabled(true);
ws.setJavaScriptCanOpenWindowsAutomatically(true);

Quelle est la bonne façon d'accéder à l'emplacement d'un utilisateur à partir d'une application WebView ?

5voto

Gary S. Points 174

Voici un exemple d'affichage d'une boîte de dialogue d'alerte pour demander à l'utilisateur la permission d'utiliser sa position :

    final Context context = this;

     @Override
     public void onGeolocationPermissionsShowPrompt(final String origin, final GeolocationPermissions.Callback callback) {
        Log.i(TAG, "onGeolocationPermissionsShowPrompt()");

        final boolean remember = false;
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("Locations");
        builder.setMessage("Would like to use your Current Location ")
        .setCancelable(true).setPositiveButton("Allow", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
              // origin, allow, remember
              callback.invoke(origin, true, remember);
           }
        }).setNegativeButton("Don't Allow", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
              // origin, allow, remember
              callback.invoke(origin, false, remember);
           }
        });
        AlertDialog alert = builder.create();
        alert.show();
     }

4 votes

Merci ! Une petite mise au point : L'argument passé au constructeur d'AlertDialog.Builder devrait être votre activité. Dans ce contexte, "this" est incorrect.

0 votes

Quelqu'un pourrait-il me donner un exemple de code entièrement fonctionnel pour cela ? Merci d'avance.

2 votes

J'ai fait tout cela mais le code ne fonctionne toujours pas, qu'est-ce qui ne va pas ? Je le teste dans l'émulateur Eclipse.

1voto

pfrank Points 700

Publier comme une nouvelle réponse pour Android mis à jour avec tout dans un seul post, parce que vous n'avez plus besoin d'utiliser setWebChromeClient .

Avec Android 6+, il suffit de demander les permissions GPS au moment de l'exécution en utilisant ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 123); .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X