Impossible d'obtenir des coordonnées GPS en utilisant Javascript sur le navigateur dans Android

Je suis très nouveau pour le codage Android, java et javascript.

J'essaie d'obtenir des coordonnées GPS actuelles et de le suivre ultérieurement sur un appareil Android. J'utilise webview et la majorité du code est écrit en javascript.

J'ai cherché beaucoup pendant quelques jours et j'ai essayé de nombreuses façons différentes, mais je ne peux pas obtenir de coordonnées GPS sur le périphérique Android. Jetez un coup d'œil sur le code et helme, expliquez pourquoi je n'obtiens pas l'emplacement GPS.

Quelques choses à souligner sont: 1. J'ai téléchargé et vérifié d'autres applications de capteurs et je peux voir les coordonnées GPS actuelles affichées (de sorte que le GPS fonctionne sur l'appareil). 2. Lorsque je lance mon code, je vois l'icône de recherche GPS dans la zone de notification, il continue de cligner des yeux mais ne corrige jamais. 3. Lorsque je lance uniquement le fichier HTML avec javascript sur un navigateur d'ordinateur portable, il demande l'autorisation de partager l'emplacement, puis il donne les coordonnées, mais le même fichier ne montre rien dans Android.

Jetez un oeil au code ci-dessous et aidez-moi à comprendre. J'ai beaucoup essayé et je publie ceci comme mon dernier espoir.

Le fichier manifeste possède les autorisations suivantes:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_GPS" /> <uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" /> <uses-permission android:name="android.permission.ACCESS_LOCATION" /> 

Le code java principal dans Android a –

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); webView = new WebView(this); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); webView.loadUrl("file:///android_asset/mymap.html"); setContentView(webView); } 

Et le fichier HTML avec javascript est –

 <!DOCTYPE html> <html> <body onunload="OnUnload()" onload="getLocation()"> <p id="demo">Your coordinates:</p> <script> var watchID; var x=document.getElementById("demo"); function getLocation() { if (navigator.geolocation) { var options = {maximumAge:600000, timeout:100000, enableHighAccuracy: true}; watchID = navigator.geolocation.watchPosition(showPosition,showError,options); } else{x.innerHTML="Geolocation is not supported by this browser.";} } function showPosition(position) { x.innerHTML="Latitude: " + position.coords.latitude + "<br />Longitude: " + position.coords.longitude; } function showError(error) { switch(error.code) { case error.PERMISSION_DENIED: x.innerHTML="User denied the request for Geolocation." break; case error.POSITION_UNAVAILABLE: x.innerHTML="Location information is unavailable." break; case error.TIMEOUT: x.innerHTML="The request to get user location timed out." break; case error.UNKNOWN_ERROR: x.innerHTML="An unknown error occurred." break; } } function OnUnload() { alert ("The current document will be unloaded!"); navigator.geolocation.clearWatch(watchID); } </script> </body> </html> 

Merci beaucoup d'avance, les haches

Eh bien, j'ai cherché et trouvé une solution. Je publie ces liens ici comme réponse à ma question pour quiconque vient jusqu'à ici chercher des réponses.

J'ai dû ajouter ces lignes dans mon code java avant de charger l'url puis j'ai pu voir les géo-coordonnées.

  webView.getSettings().setGeolocationEnabled(true); webView.setWebChromeClient(new WebChromeClient() { public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { // callback.invoke(String origin, boolean allow, boolean remember); callback.invoke(origin, true, false); } }); 

Pour plus d'informations, suivez ces deux liens –

  • Géolocalisation de la visionneuse Android
  • Android: Utilisation de html5 pour déterminer la géolocalisation dans la visualisation web avec javascript api

Sur un téléphone Android 6.0 (pas sûr d'autres versions), cela me l'a tué dans mon fichier build.gradle :

 targetSdkVersion: 23 

Réduisant cela à

 targetSdkVersion 21 

J'ai réglé mon problème.