【问题标题】:Android Geolocation on webviewwebview上的Android地理定位
【发布时间】:2014-05-06 13:59:06
【问题描述】:

我需要从 web 视图中获取用户的位置,并且它不会要求我获得获取位置的权限。以下是我的 webview 代码:

WebView 设置

public void WebViewSettings(){

    webView = (WebView) findViewById(R.id.webview);
    webView.canGoBack();

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setSupportZoom(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.setWebViewClient(new WebViewClientSetup());
    //webView.setWebChromeClient(new GeoWebChromeClient());
    webView.getSettings().setGeolocationEnabled(true);
    //webView.getSettings().setGeolocationDatabasePath( context.getFilesDir().getPath() );

    myTimer = new Timer();
    //Start this timer when you create you task
    myTimer.schedule(new loaderTask(), 20000);

}

WebChromeClient:

public class GeoWebChromeClient extends WebChromeClient {
    @Override
    public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
        callback.invoke(origin, true, false);
    }
}

WebViewClient:

public class WebViewClientSetup extends WebViewClient {

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

    @Override
    public void onLoadResource(WebView view, String url) {
        // Check to see if there is a progress dialog
        if (progressDialog == null) {
            progressDialog = new ProgressDialog(context);
            progressDialog.setTitle("Loading...");
            progressDialog.setMessage("Please wait.");
            progressDialog.setCancelable(true);
            progressDialog.setIndeterminate(true);
            progressDialog.show();
        }
    }

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler,
            SslError error) {
        handler.proceed();
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        isPageLoadedComplete = true;
        View mapHeight = (View) findViewById(R.id.webview);
        int height = mapHeight.getHeight();
        Log.d("map height", "map height" + height);
        // Page is done loading;
        // hide the progress dialog and show the webview
        if (progressDialog.isShowing()) {
            progressDialog.dismiss();
        }
    }

    @Override
    public void onReceivedError(WebView view, int errorCod,
            String description, String failingUrl) {
        AlertDialog();
    }
}

它没有征求我的同意,我不知道为什么,有人能看出我哪里出错了吗?提前致谢!

【问题讨论】:

标签: java android webview webviewclient webchromeclient


【解决方案1】:

您应该在 android-manifest.xml 中添加您想要使用的权限。 将以下行添加到 android-manifest.xml。

<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" />

【讨论】:

  • 我已经有 &lt;uses-permission android:name="android.permission.INTERNET" /&gt; && &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt; 并且我已经添加了其他的,但它似乎没有解决问题,我想我应该得到一个弹出窗口询问我的许可使用我的位置?
  • 这可能是一个愚蠢的问题,但你是在真实设备上测试吗?因为代码看起来是正确的,你应该得到一个弹出窗口,询问你是否允许使用你的位置。
  • 是的,在大约 5 种不同的真实设备上,我想我需要向 manefest 文件添加更多权限,包括 &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt; && &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;。我还发现,如果我想弹出一个警报,询问用户是否允许使用他们的位置,我必须使用 AlertBuilder 手动将其添加到 onGeolocationPermissionsShowPrompt 方法中
  • 您终于启动并运行了它吗?
猜你喜欢
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多