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

ИЗМЕНИТЬ

В соответствии с этой страницей API-интерфейс GeoLocation присутствует в сборке QtWebKit.

http://trac.webkit.org/wiki/QtWebKitFeatures22

ПОДРОБНОСТИ

Телефон: Galaxy Nexus

Платформа: Android 4.1.1 (SDK 14)

Рамка: Qt 4.8.0 для Android armv7a

Ответ 1

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

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

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

Ответ 2

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

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