【问题标题】:QWebView HTML5 GeoLocation on Android platformAndroid平台上的QWebView HTML5 GeoLocation
【发布时间】:2012-09-07 12:18:30
【问题描述】:

尝试在使用 Necessitas 的 QWebView 端口查看的 HTML5 网页中获取 GPS 坐标。但是它总是以 Not Supported 响应。

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

编辑

根据此页面,GeoLocation API 存在于 QtWebKit 构建中。

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

详情

电话:Galaxy Nexus

平台:Android 4.1.1 (SDK 14)

框架:Android armv7a 的 Qt 4.8.0

【问题讨论】:

  • 我认为android.permission.FINE_LOCATION 应该是android.permission.ACCESS_FINE_LOCATION。另外,你看到这个answer了吗?它似乎有一些很好的提示(不是特定于 Qt,但可能仍然有帮助)。

标签: javascript android c++ html qt4


【解决方案1】:

我认为您将不得不设置粗略的位置和互联网权限,因为如果我正确,精细位置仅用于 gps。无论如何,如果 gps 不可用,则两者兼有是好的原因,将使用您的 Internet 连接上的位置。

   <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
}

这是位伪代码 - 我目前没有原始代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-26
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多