Попытка получить GPS-координаты на веб-странице HTML5, просматриваемой через порт Necessitas QWebView. Однако он всегда отвечает «Не поддерживается».
function load( )
{
if ( navigator.geolocation )
{
alert( "Supported." );
}
else
{
alert( "Not Supported!" );
}
}
Я изменил QWebPage, чтобы разрешить разрешения:
BrowserWebPage::BrowserWebPage( QObject* parent ) : QWebPage( parent )
{
connect( this,
SIGNAL( featurePermissionRequested( QWebFrame*, QWebPage::Feature ) ),
SLOT( permissionRequested( QWebFrame*, QWebPage::Feature ) ) );
}
void BrowserWebPage::permissionRequested( QWebFrame* frame, QWebPage::Feature feature )
{
if ( feature == Geolocation )
{
setFeaturePermission( frame, feature, PermissionGrantedByUser );
}
else //denied
{
setFeaturePermission( frame, feature, PermissionDeniedByUser );
}
}
И установите следующие разрешения:
android.permission.INTERNET
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
РЕДАКТИРОВАТЬ
Согласно этой странице, в сборке QtWebKit присутствует API GeoLocation.
http://trac.webkit.org/wiki/QtWebKitFeatures22
ПОДРОБНОСТИ
Телефон: Galaxy Nexus
Платформа: Android 4.1.1 (SDK 14)
Framework: Qt 4.8.0 для Android armv7a
Я думаю, что вам придется установить грубое местоположение и разрешение на интернет, потому что точное местоположение используется только для GPS, если я прав. в любом случае наличие обоих является хорошей причиной, если gps недоступен, будет использоваться местоположение через ваше интернет-соединение.
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET" />
У меня нет опыта работы с qtwebkit, но это основы, которые я могу вам рассказать.
Я просто попробовал что-то очень похожее и не смог заставить navigator.geolocation работать, поэтому я реализовал свой собственный класс геолокации и добавил его в фрейм.
объект mygeolocation реализовал сигнал и слот
signal:
void updatepos(float lon, float lat); // called from get location when location is found
slot:
void getlocation(); // gets location and calls updatepos
после загрузки страницы:
frame->addToJavaScriptWindowObject(QString("geo"), geo);
frame->evaluateJavaScript("init()");
Где geo был экземпляром моего объекта геолокации
В JavaScript я подключил свое обновление сигнала геообъекта к функции,
function update(lon,lat)
{
// do stuff with lon, lat
}
function init(){
geo.connect(update); // connect to QT code
geo.getlocation(); // ask for update from QT code
}
Это битовое псевдокодирование — в данный момент у меня нет исходного кода.