带有HTML5地理位置的Android Webview

Android Webview with HTML 5 geolocation

本文关键字:Android Webview 地理位置 HTML5 带有      更新时间:2023-09-26

我正在使用web视图加载web应用程序。在我加载的页面中,我使用HTML5地理位置API来检测用户的位置。这适用于所有浏览器,目前已在iOS应用程序中运行。出于某种原因,我无法在Android网络视图中使用它。当我运行下面的代码时,我在堆栈跟踪中看到了以下消息:

[信息:控制台(24)]"未捕获引用错误:未定义PageMethods",来源:[脚本的URL](24)

同样,这在浏览器中也可以正常工作。

    package bar.krowd.krowdapp;
    import android.graphics.Color;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.webkit.GeolocationPermissions;
    import android.webkit.WebChromeClient;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    public class MainActivity extends AppCompatActivity {
    private WebView KrowdView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
        KrowdView = (WebView) findViewById((R.id.activity_main_webview));
        WebSettings ws = KrowdView.getSettings();
        ws.setJavaScriptEnabled(true);
        ws.setGeolocationEnabled(true);

        KrowdView.setWebViewClient(new WebViewClient());
        KrowdView.setWebChromeClient(new GeoWebChromeClient());
        KrowdView.setBackgroundColor(Color.BLACK);
        KrowdView.loadUrl([I AM PUTTING THE URL HERE]);
}

@Override
public void onBackPressed() {
    // Pop the browser back stack or exit the activity
    if (KrowdView.canGoBack()) {
        KrowdView.goBack();
    }
    else {
        super.onBackPressed();
    }
}
public class GeoWebChromeClient extends WebChromeClient {
    @Override
    public void onGeolocationPermissionsShowPrompt(String origin,
                                                   GeolocationPermissions.Callback callback) {
        // Always grant permission since the app itself requires location
        // permission and the user has therefore already granted it
        callback.invoke(origin, true, false);
    }
}
}

我的AndroidManifest.xml中列出了以下内容:

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

这似乎是一个错误,我在应用程序build.gradle 中将targetSdkVersion从23降级到21解决了它

添加此项:

webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setDomStorageEnabled(true);