gpt4 book ai didi

Android GrantPermissionRule 不适用于 api-27

转载 作者:行者123 更新时间:2023-12-04 11:14:13 27 4
gpt4 key购买 nike

我的 MainActivityTest 中的权限规则配置如下类(class)

@Rule
public GrantPermissionRule permissionRule =
GrantPermissionRule.grant(RECORD_AUDIO, WRITE_EXTERNAL_STORAGE);
当我运行以下命令以使用 api 27 在模拟器上执行测试时
./gradlew connectedCheck
它失败并出现以下错误
com.example.myapplication.MainActivityTest > testLaunch_main_activity[Pixel_XL_API_27(AVD) - 8.1.0] FAILED 
androidx.test.espresso.NoActivityResumedException: No activities in stage RESUMED. Did you forget to launch the activity. (test.getActivity() or similar)?
at dalvik.system.VMStack.getThreadStackTrace(Native Method)
令人惊讶的是,权限在应用程序信息设置中显示为已授予,但当测试在具有 api 版本 27(或更低版本)的模拟器上运行时,它仍然要求权限
有人可以确认这是否是某些 android 插件中的错误,或者我是否在这里遗漏了任何内容。
源代码 - https://github.com/vivekweb2013/test-android-project

最佳答案

您正在使用 ContextCompatcheckSelfPermission检查应用程序是否有权限。这与支持库向后兼容,但不确定与 androidx。替代方法可以使用 PermissionCheckercheckSelfPermission api之类的,
对于 API 级别 22 及以下,

int permission = PermissionChecker.checkSelfPermission(context, permission);

if (permission == PermissionChecker.PERMISSION_GRANTED) {
// permission is granted
} else {
// permission not granted
}
但鉴于这些权限 RECORD_AUDIOWRITE_EXTERNAL_STORAGE是危险的权限,在我们的应用程序开始使用它之前需要用户确认。在 API 级别 23 以下,这些权限在 AndroidManifest 中声明时自动授予所以摆脱这个问题的另一种方法是只对 API 级别 23+ 进行验证,因为验证是有意义的。

关于Android GrantPermissionRule 不适用于 api-27,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67651105/

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