I have a WebView that opens a URL that requires access to the user's location. It can determine the location when using Google Chrome outside the app, but in the app, it says I am not allowing the application to use location. Currently I have added
<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" />
to my Manifest, and in my Class, I have:
@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)
Am I missing something? Thank you for your help.
You have to import android.webkit.GeolocationPermissions.Callback
and android.webkit.WebChromeClient
just to Set the Geolocation permission state for the supplied origin by calling callback.invoke(origin, true, false);
in onGeolocationPermissionsShowPrompt
method of WebChromeClient
like below
Code
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");
and you have to add 2 manifest permission's as
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Hope it works.