2014-02-17 2 views
2

Я хочу использовать геолокацию на Android. Я пишу приложение в Apache Cordova. Геолокация не работает как на эмуляторе andoid pc, так и на телефоне andoid.Кордова геолокации не работает на Android

Стараюсь http://cordova.apache.org/docs/en/2.4.0/cordova_geolocation_geolocation.md.html#geolocation.getCurrentPosition_full_example и http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_geolocation

Мои платформы/Android/AndroidManifest.xml:

<?xml version='1.0' encoding='utf-8'?> 
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" android:windowSoftInputMode="adjustPan" package="net.example.test" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <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" /> 
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" /> 
    <application android:debuggable="true" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:name="Test" android:theme="@android:style/Theme.Black.NoTitleBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

WWW/Config.xml:

<?xml version='1.0' encoding='utf-8'?> 
<widget id="net.example.test" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> 
    <name>Test</name> 
    <description> 
     A sample Apache Cordova application that responds to the deviceready event. 
    </description> 
    <author email="[email protected]" href="http://cordova.io"> 
     Apache Cordova Team 
    </author> 
    <content src="index.html" /> 
    <access origin="*" /> 
    <feature name="Geolocation"> 
     <param name="android-package" value="org.apache.cordova.GeoBroker" /> 
    </feature> 
</widget> 

У меня есть Cordova 3.3.1 и эти плагины:

$ cordova -v 
3.3.1-0.4.2 
$ cordova plugin ls 
[ 'org.apache.cordova.console', 
    'org.apache.cordova.device', 
    'org.apache.cordova.dialogs', 
    'org.apache.cordova.geolocation' ] 
$ 

Я нахожу много вопросов в Интернете (на StackOverflow тоже), но все не работает :-(

Есть ли у вас какие-либо идеи, где у меня есть ошибка?


Update:

Теперь у меня есть в index.html:

<!DOCTYPE html> 
<html><head> 
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script> 
    <script type="text/javascript" charset="utf-8"> 

    // Wait for device API libraries to load 
    document.addEventListener("deviceready", onDeviceReady, false); 

    // device APIs are available 
    function onDeviceReady() { 
     console.log('in onDeviceReady()'); 
     navigator.geolocation.getCurrentPosition(onSuccess, onError); 
    } 

    // onSuccess Geolocation 
    function onSuccess(position) { 
     console.log('in onSuccess()'); 
     console.log(position.coords.latitude); 
     console.log(position.coords.longitude); 
     var element = document.getElementById('geolocation'); 
     element.innerHTML = 'Latitude: '   + position.coords.latitude    + '<br />' + 
          'Longitude: '   + position.coords.longitude    + '<br />' + 
          'Altitude: '   + position.coords.altitude    + '<br />' + 
          'Accuracy: '   + position.coords.accuracy    + '<br />' + 
          'Altitude Accuracy: ' + position.coords.altitudeAccuracy  + '<br />' + 
          'Heading: '   + position.coords.heading    + '<br />' + 
          'Speed: '    + position.coords.speed     + '<br />' + 
          'Timestamp: '   + position.timestamp     + '<br />'; 
    } 

    // onError Callback receives a PositionError object 
    function onError(error) { 
     console.log('in onError()'); 
     console.log(error.code); 
     console.log(error.message); 
     alert('code: ' + error.code + '\n' + 
       'message: ' + error.message + '\n'); 
    } 

    </script> 
    </head><body><p id="geolocation">Finding geolocation...</p></body></html> 

После того как я запустить приложение в Android эмулятор и запустить LogCat, я вижу:

$ telnet localhost 5554 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
Android Console: type 'help' for a list of commands 
OK 
geo fix 50.60 10.20 
OK 

$ adb logcat Cordova:* DroidGap:* CordovaLog:* *:S 
- waiting for device - 
I/CordovaLog( 805): Changing log level to DEBUG(3) 
I/CordovaLog( 805): Found start page location: index.html 
I/CordovaLog( 805): Changing log level to DEBUG(3) 
I/CordovaLog( 805): Found start page location: index.html 
D/CordovaLog( 805): file:///android_asset/www/index.html: Line 11 : in onDeviceReady() 
D/CordovaLog( 805): file:///android_asset/www/index.html: Line 33 : in onError() 
D/CordovaLog( 805): file:///android_asset/www/index.html: Line 34 : null 

Can вы, пожалуйста, помогите мне?

+0

Почему вы ищете документацию для cordova 2.4, если используете Cordova 3.3? А также вы не говорите, какая у вас проблема (ошибки в консоли? Просто не получаю позицию?) – QuickFix

+0

Я отправляю плохую ссылку. Я пробую код для версии 3.3.0 (код такой же, как для 2.4) http://goo.gl/8Z4NmH. Я не вижу сообщений об ошибках или отладочных сообщениях. Мое приложение пишет «Поиск местоположения ...«на экран и дальше ничего не произойдет». Я добавляю «console.log (« Test log »),« в мое приложение, но на выходе «adb logcat» я его не вижу. – martin

+0

Вы нашли какое-либо решение этой проблемы. Я тоже получаю ту же проблему. – mlakhara

ответ

2

Ну, я боролся с этой проблемой в течение нескольких часов (возможно, дней) и выяснил следующую ссылку; https://issues.apache.org/jira/browse/CB-5977

Я не уверен, что он уже или будет устаревшим. Но в любом случае мое решение было «rm org.apache.cordova.geolocation», потому что оно вообще не работало.

Тогда я столкнулся со следующей ссылкой mozilla; https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/Using_geolocation

и единственное, что я делал для получения местоположения пользователя, следующее:

<!DOCTYPE html> 
<html> 
<head> 
<title>Device Properties Example</title> 

</head> 
<body> 

<script src="http://192.168.43.15:8081/target/target-script-min.js#anonymous"></script> 
<script type="text/javascript" charset="utf-8" src="cordova.js"></script> 
<script type="text/javascript" charset="utf-8"> 

function geo_success(position) { 
    alert("success" + " : " + position.coords.latitude + ", position.coords.longitude"); 
    //do_something(position.coords.latitude, position.coords.longitude); 
} 

function geo_error() { 
alert("Sorry, no position available."); 
} 

var geo_options = { 
enableHighAccuracy: true, 
maximumAge  : 30000, 
timeout   : 27000 
}; 

var wpid = navigator.geolocation.getPosition(geo_success, geo_error, geo_options); 
</script> 
<p id="geolocation">Finding geolocationsss...</p> 
</body> 
</html> 

ПРИМЕЧАНИЕ: Это действительно работало на phonegapDevApp wirelessy, но не работало на реальном устройстве. Вот почему я продолжал искать и учиться болезненным образом, что файлы js должны быть внутри тела, а не заголовком, и заменили мою команду navigator.geolocation.getPosition от «initialize» до «initialize». А затем снова добавлен плагин геолокации!

Да, наконец, мое приложение отлично работало. Он показал карту с моим текущим местоположением, закрепленным в начале моего приложения.

Надеюсь, это сработает и для вас!

Смежные вопросы