Je ne parviens pas à faire fonctionner la géolocalisation sous Android dans l'émulateur (même lorsque je geo fix
sur telnet) et sur le périphérique. Fonctionne sur iOS, WP8 et dans le navigateur.
Lorsque je demande au périphérique l’emplacement à l’aide du code suivant, j’obtiens toujours une erreur (dans mon cas, personnalisez Retrieving your position failed for unknown reason.
avec null
avec le code et le message d’erreur).
Code associé:
successHandler = (position) ->
resolve App.Location.create
lat: position.coords.latitude
lng: position.coords.longitude
errorHandler = (error) ->
error = switch error.code
when 1
App.LocationError.create
message: 'You haven\'t shared your location.'
when 2
App.LocationError.create
message: 'Couldn\'t detect your current location.'
when 3
App.LocationError.create
message: 'Retrieving your position timeouted.'
else
App.LocationError.create
message: 'Retrieving your position failed for unknown reason. Error code: ' + error.code + '. Error message: ' + error.message
reject(error)
options =
maximumAge: Infinity # I also tried with 0
timeout: 60000
enableHighAccuracy: true
navigator.geolocation.getCurrentPosition(successHandler, errorHandler, options)
plateformes/Android/AndroidManifest.xml
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
www/config.xml (juste au cas où)
<feature name="Geolocation">
<param name="Android-package" value="org.Apache.cordova.GeoBroker" />
</feature>
Utilisation de Cordova 3.1.0. Test sur Android 4.2. Plugin installé. Cordova.js est inclus dans index.html (d’autres plugins comme InAppBrowser fonctionnent bien).
$ cordova plugins ls
[ 'org.Apache.cordova.console',
'org.Apache.cordova.device',
'org.Apache.cordova.dialogs',
'org.Apache.cordova.geolocation',
'org.Apache.cordova.inappbrowser',
'org.Apache.cordova.vibration' ]
Je suis désemparé. Est-ce que je manque quelque chose?
Essayez les options de cette façon pour voir si cela fonctionne pour vous comme cela l’a été pour moi:
var options = { enableHighAccuracy: true };
navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
Ma solution consistait à utiliser le support natif de géolocalisation HTML5 pour Android/samsung, le cas échéant:
// BEFORE the deviceready event has fired:
// Check if HTML5 location support exists
app.geolocation = false;
if(navigator.geolocation) {
app.geolocation = navigator.geolocation;
}
// AFTER the deviceready event:
if(app.geolocation) {
var locationService = app.geolocation; // native HTML5 geolocation
}
else {
var locationService = navigator.geolocation; // cordova geolocation plugin
}
locationService.getCurrentPosition(
function(pos) {
},
function(error) {
},
{enableHighAccuracy: true, timeout: 15000}
);
Pour tous les appareils samsung avec lesquels j'ai testé, enableHighAccuracy devait être "vrai" pour que cela fonctionne. EnableHighAccuracy peut également être défini sur "false" avec des périphériques non Samsung tels que le Nexus 7.
Essaye ça,
Supprimer le plugin de géolocalisation
cordova plugin rm org.Apache.cordova.geolocation
Cependant, assurez-vous que les propriétés AndroidManifest.xml et config.xml restent telles quelles.
(in app/res/xml/config.xml)
<feature name="Geolocation">
<param name="Android-package" value="org.Apache.cordova.GeoBroker" />
</feature>
(in app/AndroidManifest.xml)
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
Et pour iOS dans config.xml
<feature name="Geolocation">
<param name="ios-package" value="CDVLocation" />
</feature>
Ensuite, créez l’application à l’aide de la CLI et exécutez-la sur le périphérique/émulateur. Vous constaterez que vous obtenez maintenant le code d'erreur ainsi que le message onError pour getlocation.
PLUS D'INFORMATIONS: Même après avoir suivi les étapes ci-dessus, vous pouvez recevoir le message de délai d'attente de manière cohérente même après avoir défini {timeout:10000}
. La solution à ce problème est assez amusante: il suffit d’éteindre votre appareil, de le rallumer et de relancer l’application. Vous devriez être surpris de voir cela fonctionner, tout comme moi!
À l'aide de Phonegap et Genymotion, le successHandler n'a jamais été appelé lorsque j'ai essayé de getCurrentPosition. Ajout des options:
{enableHighAccuracy: true, timeout: 2*1000, maximumAge: 0}
résolu cela pour moi.
Selon https://issues.Apache.org/jira/browse/CB-5977 , le support du plugin Android a été supprimé . Yi Ming Kuan a déclaré WebView sur les nouvelles versions d'Android obtiendra des verrous GPS plus rapidement que l'API native, d'où sa suppression. Ajouter le plugin sur Android ajoute simplement les autorisations nécessaires pour utiliser HTML5 Géolocalisation dans votre application.
supprimer cette ligne
<preference name="permissions" value="none"/>
vérifiez que toutes les lignes <uses-permission...>
et la ligne <uses-sdk...>
sont situées avant la balise <application...>
.
après cela, désinstallez l'application manuellement sur le téléphone et réinstallez-la.
j'espère que cela pourra aider.
lg
fastrde
Je pense que vous ajoutez le plugin manuellement. utilisez la commande: (strictement si vous utilisez la construction CLI)
phonegap local plugin add https://git-wip-us.Apache.org/repos/asf/cordova-plugin-geolocation.git
l'ajout de l'autorisation ci-dessous dans le fichier manifeste a résolu mon problème
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
Si le code d'erreur était 3, vérifiez si l'emplacement dans les paramètres est activé ..__ C'est un travail pour moi.
J'ai le même problème avec vous, mais finalement je l'ai résolu.
La raison de ce problème est que nous utilisons toujours la fonction navigator.geolocation.getCurrentPosition du navigateur pour localiser la position. Nous devons donc laisser l'application utiliser l'implémentation native cordova au lieu de html5.