關于WebView中無法定位的問題
之前碰到個問題,使用webview的時候無法定位,發現有人說要這麼做
WebSettings settings = wbContent.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setGeolocationEnabled(true);
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);
String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
settings.setGeolocationDatabasePath(dir);
webChromeClient = new WebChromeClient(){
@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, true);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
};
wbContent.setWebChromeClient(webChromeClient);
wbContent.loadUrl("https://xxxxxxxxxxxxxxxxxxxxxxxx");
網上很多地方說加了這段代碼之後就可以正常定位了,然而我加上之後還是沒有什麼卵用。沒辦法,百度就是沒谷歌給力。
看了下日志,說我沒有擷取到權限,但是代碼中的callback.invoke(origin, true, true);是擷取定位權限的操作啊。
我想了想,突然想到了6.0之後要動态申請權限。
我這樣加入動态申請權限的代碼
if (Build.VERSION.SDK_INT >= ) {
int checkPermission = ContextCompat.checkSelfPermission(LocationTestActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION);
if (checkPermission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(LocationTestActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, );
ActivityCompat.requestPermissions(LocationTestActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, );
}else {
wbContent.loadUrl("https://xxxxxxxxxxxxxxxxxxxxxxxx");
}
}
發現這樣就能正常的擷取到定位的結果,有的人可能不知道要在哪裡動态申請,其實這要看你具體的流程,你也可以在跳轉到這個頁面的時候申請,也可以在展示網頁的時候申請。
最後說一下,onGeolocationPermissionsShowPrompt這個方法隻會調用一次,和動态申請權限一樣,隻會在第一次調用。
原文出處 : https://www.jianshu.com/p/9ae4f4c36ed5