在 Chrome 中访问位置,在 WebView 中不起作用
Location is accessed in Chrome, doesn't work in WebView
我有一个打开 URL 需要访问用户位置的 WebView。在应用外使用GoogleChrome可以判断位置,但在应用内却说我不允许应用使用位置。目前我已经添加了
<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" />
我的清单,在我的 Class 中,我有:
@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)
我错过了什么吗?谢谢你的帮助。
您必须导入 android.webkit.GeolocationPermissions.Callback
和 android.webkit.WebChromeClient
只是为了 为提供的来源设置地理定位权限状态 通过在 WebChromeClient
的 onGeolocationPermissionsShowPrompt
方法中调用 callback.invoke(origin, true, false);
,如下所示
代码
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");
并且您必须添加 2 个清单权限作为
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
希望有用。
我有一个打开 URL 需要访问用户位置的 WebView。在应用外使用GoogleChrome可以判断位置,但在应用内却说我不允许应用使用位置。目前我已经添加了
<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" />
我的清单,在我的 Class 中,我有:
@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)
我错过了什么吗?谢谢你的帮助。
您必须导入 android.webkit.GeolocationPermissions.Callback
和 android.webkit.WebChromeClient
只是为了 为提供的来源设置地理定位权限状态 通过在 WebChromeClient
的 onGeolocationPermissionsShowPrompt
方法中调用 callback.invoke(origin, true, false);
,如下所示
代码
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");
并且您必须添加 2 个清单权限作为
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
希望有用。