之前碰到個問題蚓曼,使用webview的時候無法定位脉执,最近19大沒法墻,只能去百度逛逛盲憎,發(fā)現(xiàn)有人說要這么做
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");
網(wǎng)上很多地方說加了這段代碼之后就可以正常定位了嗅骄,然而我加上之后還是沒有什么卵用。沒辦法饼疙,百度就是沒谷歌給力溺森。
看了下日志慕爬,說我沒有獲取到權(quán)限,但是代碼中的callback.invoke(origin, true, true);是獲取定位權(quán)限的操作啊屏积。
我想了想医窿,突然想到了6.0之后要動態(tài)申請權(quán)限。
我這樣加入動態(tài)申請權(quán)限的代碼
if (Build.VERSION.SDK_INT >= 23) {
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}, 1);
ActivityCompat.requestPermissions(LocationTestActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}else {
wbContent.loadUrl("https://xxxxxxxxxxxxxxxxxxxxxxxx");
}
}
發(fā)現(xiàn)這樣就能正常的獲取到定位的結(jié)果炊林,有的人可能不知道要在哪里動態(tài)申請姥卢,其實這要看你具體的流程,你也可以在跳轉(zhuǎn)到這個頁面的時候申請,也可以在展示網(wǎng)頁的時候申請。
最后說一下瘤运,onGeolocationPermissionsShowPrompt這個方法只會調(diào)用一次窘行,和動態(tài)申請權(quán)限一樣,只會在第一次調(diào)用快鱼。