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
}
Это немного псевдокодирование - у меня нет исходного кода, доступного на данный момент.