gpt4 book ai didi

android - 无法测试需要棉花糖上的 CHANGE_NETWORK_STATE/WRITE_SETTINGS 权限的代码

转载 作者:行者123 更新时间:2023-11-29 23:58:25 26 4
gpt4 key购买 nike

我正在尝试将我的应用程序的 targetSDK 升级到 23 以上,但我遇到了一个小问题。我有一个将流量绑定(bind)到 Wifi 的 Activity (测量路由器的网络速度,即使路由器没有连接到互联网)。为了实现这一点,我的应用需要 CHANGE_NETWORK_STATE 权限。如果在 list 中声明,通常会直接授予该权限。在 Android 6.0 上(确切地说,这已在 6.0.1 IIRC 中修复)CHANGE_NETWORK_STATE 已损坏且不会被授予,因此您需要 WRITE_SETTINGS 权限。我已经为 Android 6.0 用户实现了一种授予该权限的方法,但是当我想使用 espresso 测试我的 Activity 时,我无法这样做。通过添加类似的内容来授予测试权限

@规则
public GrantPermissionRule runtimePermissionRule = GrantPermissionRule.grant(Manifest.permission.CHANGE_NETWORK_STATE);

到测试用例。这在应用程序的其他地方有效,但为此我得到了junit.framework.AssertionFailedError: Failed to grant permissions, see logcat for details 在我的测试结果中。在 logcat 中,我发现 E/GrantPermissionCallable: Permission: android.permission.WRITE_SETTINGS cannot be granted! 或与 CHANGE_NETWORK_STATE 相同,我尝试同时授予它们,但它们都没有不工作。我有没有其他方法可以在测试环境中授予权限?还是从现在开始我无法在 6.0 设备上测试此 Activity ?

最佳答案

我设法通过使用 UiAutomator 和 shell appops 命令授予权限来解决这个问题:

Instrumentation instrumentation = getInstrumentation();
UiDevice device = UiDevice.getInstance(instrumentation);
String targetPackageName = instrumentation.getTargetContext().getPackageName();

if (Build.VERSION.SDK_INT >= 23) {
String shellCommand = String.format("appops set %s WRITE_SETTINGS allow", targetPackageName);
device.executeShellCommand(shellCommand);
}

关于android - 无法测试需要棉花糖上的 CHANGE_NETWORK_STATE/WRITE_SETTINGS 权限的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50158000/

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