I'm just playing with Appcelerator's Titanium platform for developing mobile apps.
My test application just opens a webview pointing to an online web page. This page uses the W3C Geolocation API to get user's location.
This are my tiapp.xml specific android permissions:
<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>
This is my javascript code for getting coords:
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');
}
It seems that navigator.geolocation and navigator.geolocation.getCurrentPosition are defined but delegate's are not executed anyway.
The question is: how to get this working? :-)
Thanks in advance.
Update: I found that the problem seems that Android 2.x webview has it's own implementation of navigator.geolocation. According to this commit on phonegap's source code.
Update 2: I wrote a very small full-native android application that opens a webclient to same webpage and works fine:
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());
}
}
Update 3: I found this source from appcelerator's github site: https://github.com/appcelerator/titanium_mobile/blob/master/android/modules/ui/src/ti/modules/titanium/ui/widget/webview/TiWebChromeClient.java