位置在Chrome中访问,在WebView中不起作用

dch*_*amb 5 android location google-chrome webview

我有一个WebView,它打开一个需要访问用户位置的URL.它可以确定在应用程序外部使用Google Chrome时的位置,但在应用程序中,它表示我不允许应用程序使用位置.目前我已添加

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

在我的Manifest和我的班级里,我有:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webViewActivity);
    WebView webView = (WebView) findViewById(R.id.webView);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webView.setWebChromeClient(new WebChromeClient());
    webSettings.setAllowUniversalAccessFromFileURLs(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setGeolocationEnabled(true)
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?谢谢您的帮助.

Kap*_*put 8

你必须导入android.webkit.GeolocationPermissions.Callbackandroid.webkit.WebChromeClient刚刚设置的起源提供了地理位置许可状态通过调用callback.invoke(origin, true, false);onGeolocationPermissionsShowPrompt的方法,WebChromeClient像下面

      mWebView = (WebView) findViewById(R.id.mywebview);
      WebSettings webSettings = mWebView.getSettings();
      webSettings.setJavaScriptCanOpenWindowsAutomatically(true);

        mWebView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                view.loadUrl(url);
                return true;
            }
        });

        webSettings.setJavaScriptEnabled(true);
        webSettings.setGeolocationEnabled(true);

        mWebView.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onGeolocationPermissionsShowPrompt(String origin,
                    Callback callback) {

                callback.invoke(origin, true, false);
            }
        });

        mWebView.loadUrl("http://www.google.com");
Run Code Online (Sandbox Code Playgroud)

并且您必须添加2个清单权限

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

希望它有效.