背景:
Android端 webview 加载链接,html获取gps定位,一直返回用户拒绝定位请求权限;需要通过如下配置
1、Android 端
清单文件
<!-- 网络权限,加载网络网页需要联网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 粗略定位权限,允许一个程序通过网络获取粗略的位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 精确定位权限,允许一个程序访问精确位置(GPS定位) -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
添加应用的权限请求
private void checkPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (MainActivity.this.checkSelfPermission(permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
MainActivity.this.checkSelfPermission(permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{permission.ACCESS_FINE_LOCATION,permission.ACCESS_COARSE_LOCATION}, 100);
} else {
initLocation();
}
} else {
initLocation();
}
}
webview(注意“// ------添加如下的配置--------”)
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);//开启DOM
//----------添加如下-----------
settings.setGeolocationEnabled(true); // 允许定位
//设置定位的数据库路径
String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
settings.setGeolocationDatabasePath(dir);
//-------------------------
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
// 这个是监听js端的log,用来测试
webView.setWebChromeClient(new WebChromeClient() {
// ----------添加如下-----------
@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
// //重写此方法,配置权限
callback.invoke(origin, true, false);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
// -------------------------------
});
webView.loadUrl(url);