Android:使用html5通过javascript api确定webview中的地理位置

rya*_*atl 10 html5 android geolocation webview cordova

我目前在webview中遇到地理定位问题.我有一个webapp.我目前没有使用phonegap或任何其他移动框架.我没有成功获得内置的html5地理位置javascript api,以便在Android应用程序的webview中运行的应用程序上运行.该网站工作正常,否则从Android 2.0+上的Chrome浏览器(支持地理位置).

我正在编译android api版本5.

我已经读过 这篇文章

Phonegap编写包含内置调用并使用主机活动的代理的解决方案很好,但我更喜欢使用内置到webview(webkit)而不使用手机间隙.

我在清单文件中设置了适当的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

这是一个示例代码段:

webview = (WebView) findViewById(R.id.webview);
pbarDialog = new ProgressDialog(this);
pbarDialog.setCancelable(false);
pbarDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
webview.setWebViewClient(new MyWebViewClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebChromeClient(new MyChromeWebViewClient());
webview.setVerticalScrollBarEnabled(false);
WebSettings webSettings = webview.getSettings();
webSettings.setSavePassword(true);
webSettings.setSaveFormData(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setGeolocationEnabled(true);
Run Code Online (Sandbox Code Playgroud)

...

private class MyChromeWebViewClient extends WebChromeClient {

@Override
public void onProgressChanged(WebView view, int progress) {
    // Activities and WebViews measure progress with different scales.
    // The progress meter will automatically disappear when we reach 100%
    activity.setProgress(progress * 100);
}

@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
    Log.d(LOG_TAG, message);
    // This shows the dialog box.  This can be commented out for dev
    AlertDialog.Builder alertBldr = new AlertDialog.Builder(activity);
    alertBldr.setMessage(message);
    alertBldr.setTitle("Alert");
    alertBldr.show();
    result.confirm();
    return true;
  }

}

private class MyWebViewClient extends WebViewClient {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
}

@Override
public void onReceivedError(WebView view, int errorCode,
    String description, String failingUrl) {
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有其他人在Webview中使用Web应用程序时遇到问题?

Hak*_*kan 8

添加onGeolocationPermissionsShowPrompt()MyChromeWebViewClient如下:

private class MyChromeWebViewClient extends WebChromeClient {

    @Override
    public void onProgressChanged(WebView view, int progress) {
        // Activities and WebViews measure progress with different scales.
        // The progress meter will automatically disappear when we reach 100%
        activity.setProgress(progress * 100);
    }

    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        Log.d(LOG_TAG, message);
        // This shows the dialog box.  This can be commented out for dev
        AlertDialog.Builder alertBldr = new AlertDialog.Builder(activity);
        alertBldr.setMessage(message);
        alertBldr.setTitle("Alert");
        alertBldr.show();
        result.confirm();
        return true;
    }

    public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
        callback.invoke(origin, true, false);
    }
}
Run Code Online (Sandbox Code Playgroud)

你需要导入" android.webkit.GeolocationPermissions".

添加此权限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

我想这会奏效.


归档时间:

查看次数:

22947 次

最近记录:

7 年,5 月 前