gpt4 book ai didi

android - WebView 不询问地理位置

转载 作者:搜寻专家 更新时间:2023-11-01 09:39:13 25 4
gpt4 key购买 nike

我正在使用 WebView 加载带有地理位置请求的站点。我在 list 中添加权限,请求用户访问,启用 javascript。

WebChromeClient 的方法“onGeolocationPermissionsShowPrompt”和“onPermissionRequest”在 Android Marshmallow 中没有调用,而在 KitKat 中一切正常。

我还添加了日志来检查它是如何工作的。

public void onGeolocationPermissionsShowPrompt(final String origin, final GeolocationPermissions.Callback callback) {
Log.e("Test", "Geolocation " + origin);
callback.invoke(origin, true, false);
}

public void onPermissionRequest(PermissionRequest request) {
Log.e("Test", "Request permission");
super.onPermissionRequest(request);
}

这是 webView 设置

webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setGeolocationEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
webView.getSettings().setSupportMultipleWindows(false);
webView.getSettings().setSupportZoom(false);

和 list 权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.vogella.android.locationapi.maps.permission.MAPS_RECEIVE" />
<uses-permission android:name="com.vogella.android.locationapi.maps.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />

感谢您的回答。

最佳答案

我相信您需要先请求位置权限才能获得地理位置。

这是我用的

    private static final String[] INITIAL_PERMS={
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION
};
private static final int INITIAL_REQUEST=1337;

为每个权限创建方法

    @RequiresApi(api = Build.VERSION_CODES.M)
private boolean canAccessFineLocation() {
return(hasPermission(Manifest.permission.ACCESS_FINE_LOCATION));
}

@RequiresApi(api = Build.VERSION_CODES.M)
private boolean canAccessCoarseLocation() {
return(hasPermission(Manifest.permission.ACCESS_COARSE_LOCATION));
}

@RequiresApi(api = Build.VERSION_CODES.M)
private boolean hasPermission(String perm) {
return(PackageManager.PERMISSION_GRANTED ==checkSelfPermission(perm));
}

在 onCreate 中确保添加这个

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if(!canAccessCoarseLocation() || !canAccessFineLocation()){
requestPermissions(INITIAL_PERMS, INITIAL_REQUEST);
}
}

还要确保您在 chrome 客户端中有此代码

       webView.setWebChromeClient(new android.webkit.WebChromeClient() {

// geolocation
@Override
public void onGeolocationPermissionsShowPrompt(String origin, android.webkit.GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, false);

}

关于android - WebView 不询问地理位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40910499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com