Javascript — QWebView HTML5 GeoLocation на платформе Android

Попытка получить 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

11

Решение

Я думаю, что вам придется установить грубое местоположение и разрешение на интернет, потому что точное местоположение используется только для GPS, если я прав. в любом случае наличие обоих является хорошей причиной, если gps недоступен, будет использоваться местоположение через ваше интернет-соединение.

   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET" />

У меня нет опыта работы с qtwebkit, но это основы, которые я могу вам рассказать.

1

Другие решения

Я просто попробовал что-то очень похожее и не смог заставить 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
}

Это битовое псевдокодирование — в данный момент у меня нет исходного кода.

1

По вопросам рекламы [email protected]