作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 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(或更低版本)的模拟器上运行时,它仍然要求权限
最佳答案
您正在使用 ContextCompat
的checkSelfPermission
检查应用程序是否有权限。这与支持库向后兼容,但不确定与 androidx。替代方法可以使用 PermissionChecker
的checkSelfPermission
api之类的,
对于 API 级别 22 及以下,
int permission = PermissionChecker.checkSelfPermission(context, permission);
if (permission == PermissionChecker.PERMISSION_GRANTED) {
// permission is granted
} else {
// permission not granted
}
但鉴于这些权限
RECORD_AUDIO
和
WRITE_EXTERNAL_STORAGE
是危险的权限,在我们的应用程序开始使用它之前需要用户确认。在 API 级别 23 以下,这些权限在
AndroidManifest
中声明时自动授予所以摆脱这个问题的另一种方法是只对 API 级别 23+ 进行验证,因为验证是有意义的。
关于Android GrantPermissionRule 不适用于 api-27,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67651105/
我是一名优秀的程序员,十分优秀!