测试应用程序中的存储访问框架

Posted

技术标签:

【中文标题】测试应用程序中的存储访问框架【英文标题】:Storage Access Framework in test app 【发布时间】:2015-12-15 04:11:19 【问题描述】:

我正在使用 Intent.ACTION_OPEN_DOCUMENT_TREE 授予我的应用程序对外部存储的写入权限(在 Lollipop 和 Marshmallow 上)。

但我想在测试应用程序中写入外部存储。 Intent.ACTION_OPEN_DOCUMENT_TREE 使用系统对话框,因此我无法在测试期间授予权限。我也尝试在应用程序中允许它,然后在测试中使用它,但它不是共享的 - 应用程序项目和测试项目是不同的包。

有人知道一些解决方法吗?为测试目的授予整个外部存储的权限?也许通过更改某些系统属性?

adb shell setprop SOMEPROPERTY 1

【问题讨论】:

【参考方案1】:

你可以试试这个命令来授予和撤销权限

adb pm grant com.package.myapp android.permission.<PERMISSION>
adb pm revoke com.package.myapp android.permission.<PERMISSION>

读取/写入外部存储的权限是

android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE

这里是解释它的视频链接:Runtime Permissions in Android 6.0 Marshmallow (Android Development Patterns Ep 3)。

【讨论】:

不幸的是,这只是访问主外部存储的替代品。我需要使用 Intent.ACTION_OPEN_DOCUMENT_TREE 访问辅助外部存储,我需要测试此功能。【参考方案2】:

作为一种解决方法,您可以使用 adb shell input keyevent 来检查授予权限复选框。

用法:

   adb shell input [text|keyevent]
   adb shell input text <string>
   adb shell input keyevent <event_code>

More Details you can find here.

【讨论】:

我需要在测试应用程序中授予权限。但我什至不知道如何在 TEST 应用程序中显示系统“打开方式”对话框以便能够授予它,例如使用此 adb shell 输入...或手动。你有什么例子吗?

以上是关于测试应用程序中的存储访问框架的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Xcode UI 测试访问核心数据存储?

SAF(存储访问框架)是不是解决了 Android 4.4(KitKat)中的 SD 卡 WRITE 问题?

如何使用 Quasar 框架访问 Vuex 存储模块操作中的 Vue 路由器?

安卓储存访问框架怎么移动文件

Android SAF(存储访问框架):从 TreeUri 获取特定文件 Uri

在 Android 中使用存储访问框架保存文件