Home » Android » javascript – QWebView HTML5 GeoLocation on Android platform

javascript – QWebView HTML5 GeoLocation on Android platform

Posted by: admin May 14, 2020 Leave a comment


Attempting to get the GPS coordinates in a HTML5 web page viewed with Necessitas’s port of QWebView. However it always responds with Not Supported.

function load( )
   if ( navigator.geolocation )
      alert( "Supported." );
      alert( "Not Supported!" );

I’ve altered the QWebPage to allow permissions:

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 );

And set the following permissions:





According to this page the GeoLocation API is present within the QtWebKit build.



Phone: Galaxy Nexus

Platform: Android 4.1.1 (SDK 14)

Framework: Qt 4.8.0 for Android armv7a

How to&Answers:

I think you will have to set coarse location and internet permission because the fine location is only used for gps if im right. in any case having both is good cause if gps is not available the location over your internet connection will be used.

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

I don’t really have experience with qtwebkit but this is the basics i can tell you.


I just tried something very similar and couldn’t get navigator.geolocation to work so I implemented a my own geolocation class and added it to the frame.

mygeolocation object implemented a signal and a slot

void updatepos(float lon, float lat); // called from get location when location is found

void getlocation(); // gets location and calls updatepos

after page had loaded:

frame->addToJavaScriptWindowObject(QString("geo"), geo);

Where geo was instance of my geolocation object

In javascript I connected my geo object signal update to a function,

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

This is bit pseudo coding – I don’t have the original code available at the moment.