android – 如何知道何时需要WRITE_EXTERNAL_STORAGE

我正在将我的 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()内部)是最安全和最简单的方法是什么?

最佳答案 当您的应用程序需要写入外部存储时,您可以看到 here只需要请求
WRITE_EXTERNAL_STORAGE.

但:

Starting in API level 19, this permission is not required to
read/write files in your application-specific directories returned by
getExternalFilesDir(String) and getExternalCacheDir().

首先,我建议您避免使用Intents请求权限,因为这是一种最佳实践,可以提高用户体验.

如果您不能使用Intent来避免使用您的应用程序进行编写,并且您知道有一天用户必须在外部编写,我认为更好的方法是在用户第一次“写入”时请求权限外部存储“路径.

据我所知,在API23中你只需要一次请求权限,所以我认为最简单的方法是在用户第一次要求权限时请求权限,我想当他执行时再一次,权限将继续被接受.您可以使用显示的程序here检查授予的权限.

Here你可以看到:

The user is prompted to give permission once, either at run time or at
install time (depending on the user’s Android version). After that,
your app can perform the operation without requiring additional
interaction from the user. However, if the user doesn’t grant the
permission (or revokes it later on), your app becomes unable to
perform the operation at all.

点赞