Я просто играю на платформе Appcelerator Titanium для разработки мобильных приложений.
Мое тестовое приложение просто открывает веб-просмотр, указывающий на онлайн-страницу.Эта страница использует API геолокации W3C для получения местоположения пользователя.
Это мои специфичные для tiapp.xml разрешения для Android:
<android xmlns:android="http://schemas.android.com/apk/res/android">
<manifest>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<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"/>
</manifest>
</android>
Это мой код JavaScript для полученияКоординаты:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position){
$("#results").append('Longitude: ' + position.coords.longitude + '<br/>');
$("#results").append('Latitude: ' + position.coords.latitude + '<br/>');
}, function(error){
$("#results").append('An error ocurred ' + error.message);
});
} else {
$("#results").append('Geolocation not supported');
}
Кажется, что navigator.geolocation и navigator.geolocation.getCurrentPosition определены, но делегаты все равно не выполняются.
Вопрос: как заставить это работать?: -)
Заранее спасибо.
Обновление: Я обнаружил, что проблема, по-видимому, в том, что в Android 2.x есть собственная реализация navigator.geolocation.Согласно этот коммит для исходного кода phonegap.
Обновление 2: Я написал очень маленькое полнофункциональное Android-приложение, которое открывает веб-клиент на той же веб-странице и работает нормально.:
package com.sourcerebels;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.GeolocationPermissions.Callback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
class MyClient extends WebChromeClient {
@Override
public void onGeolocationPermissionsShowPrompt(String origin,
Callback callback) {
callback.invoke(origin, true, false);
}
}
public class TestWebClient extends Activity {
WebView webView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setGeolocationDatabasePath("/data/data/testWebClient");
webView.loadUrl("http://www.sourcerebels.com/index2.html");
webView.setWebChromeClient(new MyClient());
}
}
Обновление 3 : Я нашел этот источник с сайта github appcelerator: https://github.com/appcelerator/titanium_mobile/blob/master/android/modules/ui/src/ti/modules/titanium/ui/widget/webview/TiWebChromeClient.java