我正在将我的Android应用程序的Target SDK版本升级到23(Android M),它具有新的运行时权限(https://developer.android.com/training/permissions/requesting.html)。我的应用程序已在其清单中声明WRITE_EXTERNAL_STORAGE,现在必须在运行时请求它。当然,我只想在必要时提出要求。
我有不同存储类型的抽象,一个通过普通的文件I / O(不是Android内容提供商的东西)实现本地存储。在这个类中,我得到一个文件路径(如/ mnt / sdcard / ...或/ data / data / ...),在访问该文件(读写模式)之前,我想检查是否需要调用WRITE_EXTERNAL_STORAGE RequestPermissions
。
所以问题是:什么是最安全和最简单的方法来确定文件是否可以在没有这种许可的情况下读写(例如因为它在getExternalFilesDir()内部)?
答案 0 :(得分:1)
当您的应用需要写入外部存储时,您可以看到here只需要WRITE_EXTERNAL_STORAGE
。
但是:
从API级别19开始,不需要此权限 在您返回的特定于应用程序的目录中读/写文件
getExternalFilesDir(String)
和getExternalCacheDir()
。
首先,我建议您不要使用Intent
来请求权限,因为这是一种最佳做法,可以提高用户体验。
如果您无法使用Intent
来避免使用您的应用程序进行编写,并且您知道有一天用户必须在外部进行编写,我认为更好的方法是请求权限用户第一次采取"写入外部存储器"路径。
据我所知,在API23中你只需要一次请求权限,所以我认为最简单的方法是在第一次要求用户需要该功能的权限时,我认为当他和#39; ll再次执行它,权限将保持被接受。您可以使用显示here的步骤检查授予的权限。
Here你可以阅读:
提示用户在运行时或在运行时授予一次权限 安装时间(取决于用户的Android版本)。之后, 您的应用可以执行操作,无需额外的操作 来自用户的互动。但是,如果用户没有授予 许可(或稍后撤销),您的应用程序变得无法 完全执行操作。