java - Android webView不显示地理位置

标签 java android

因此我们制作了一个使用地理数据的 html5 web 应用程序。

当我在本地 Chrome 浏览器上打开它时,它会显示所有位置和我当前的位置。

如果我在应用程序上打开它,它会显示所有位置,但不显示我的位置...我该如何解决这个问题?

代码如下:

public class MainActivity extends Activity {

    /**
     * WebViewClient subclass loads all hyperlinks in the existing WebView
     */
    public class GeoWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // When user clicks a hyperlink, load in the existing WebView
            if(url.startsWith("geo:"))
            {
                Uri gmmIntentUri = Uri.parse(url);
                Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
                mapIntent.setPackage("com.google.android.apps.maps");
                if (mapIntent.resolveActivity(getPackageManager()) != null) {
                    startActivity(mapIntent);
                }
                return true;
            }
            view.loadUrl(url);

            return true;
        }




    }

    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, false, false);
        }


    }

    WebView mWebView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView) findViewById(R.id.webView);
        // Brower niceties -- pinch / zoom, follow links in place
        mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        mWebView.getSettings().setBuiltInZoomControls(true);
        mWebView.setWebViewClient(new GeoWebViewClient());
        // Below required for geolocation
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setGeolocationEnabled(true);
        mWebView.setWebChromeClient(new GeoWebChromeClient());

        mWebView.loadUrl("http://insert-website-here.de");

    }



    @Override
    public void onBackPressed() {
        // Pop the browser back stack or exit the activity
        if (mWebView.canGoBack()) {
            mWebView.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, false, false);
    }


}

但看起来不像……有什么想法吗?

这是我的权限:

<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" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

最佳答案

必须在 WebView 中启用 JavaScript,使用 WebSettings.setJavaScriptEnabled(true); WebView 必须使用实现 WebChromeClient.onGeolocationPermissionsShowPrompt() 的自定义 WebChromeClient

此方法由 WebView 调用,以获得向 JavaScript 公开用户位置的权限。 (在浏览器的情况下,我们向用户显示提示。)默认实现不执行任何操作,因此永远不会获得权限,并且位置永远不会传递给 JavaScript。始终授予权限的简单实现是...

    webView.setWebChromeClient(new WebChromeClient() {
 public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
    callback.invoke(origin, true, false);
 }
});

使用WebSettings.setGeolocationDatabasePath(...)设置数据库的位置

webView.getSettings().setGeolocationDatabasePath( context.getFilesDir().getPath() );

关于java - Android webView不显示地理位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29918643/

相关文章:

java - 在java中迭代期间存储多个匹配项

java - 如何区分 JComboBox 中的 setSelectedItem 调用和 actionPerformed 方法

android - 在 Cyborg 中呈现新 Controller 时如何添加过渡动画?

android - 合并不同的 Android Studio 项目

android语言环境随机更改回默认值

java - 为什么java servlet不是过滤器?

java - 如何在服务器模式下将 OpenOffice 用作多线程服务?

java - 如何在Java代码中使用当前日期以及注册期间使用的生日用户来计算年龄?

Android ViewPager 未更新

android - 请提出一个在android 1.6 中保护应用程序文件的好方法?