gpt4 book ai didi

android - Android 6.0 中的 ConnectivityManager.requestNetwork

转载 作者:IT老高 更新时间:2023-10-28 22:22:40 31 4
gpt4 key购买 nike

我正在尝试使用 ConnectivityManager.requestNetwork(NetworkRequest, ConnectivityManager.NetworkCallback)

获取新的 ConnectivityManager.bindProcessToNetwork(Network)

原因是强制应用在某个没有互联网连接的特定网络(它是本地硬件通信网络)中调用 future 的请求。此时,系统正在通过 3G/4G 网络发送请求,并且永远无法到达所需的 Wifi 网络,因为该网络没有响应 connectivity check那个安卓电话。

当我调用 requestNetwork 方法时,我收到以下错误:

java.lang.SecurityException: com.xyz.app was not granted  either of these permissions: android.permission.CHANGE_NETWORK_STATE, android.permission.WRITE_SETTINGS.

我尝试调用新方法来请求 Android 6.0 中可用的权限:

 requestPermissions(new String[]{Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS}, PERMISSIONS_REQUEST_WIFI);

但回调始终是PackageManager.PERMISSION_DENIED

我将这两个权限都放在了AndroidManifest.xml 中,但没有成功。

注意:Manifest.permission.WRITE_SETTINGS 不在 Permissions Groups 中.

最佳答案

我不确定这是否是 Google 有意为之,但以下是我看到的行为:

CHANGE_NETWORK_STATE 似乎总是被拒绝(如评论中所述,它是签名许可),但这似乎也无关紧要。我的 ConnectivityManager 网络请求似乎都由 WRITE_SETTINGS 门控 - 所以如果你有 WRITE_SETTINGS 你不需要 CHANGE_NETWORK_STATE.

如评论中所述,您执行此操作与其他权限不同,使用:

 Intent goToSettings = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
goToSettings.setData(Uri.parse("package:" + Context.getPackageName()));
startActivity(goToSettings);

在那之后,我的 ConnectivityManager 网络请求非常好。


要在调用 ACTION_MANAGE_WRITE_SETTINGS Activity 之前检查是否已授予权限,此答案的解决方案是使用 Settings.System.canWrite(Context)

Can't get WRITE_SETTINGS permission


更新:从 Android 6.0.1 开始,CHANGE_NETWORK_STATE 会在您的 list 文件中请求时自动授予。上述 WRITE_SETTINGS 检查仅在 6.0

中需要

关于android - Android 6.0 中的 ConnectivityManager.requestNetwork,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32185628/

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