android - 如何知道何时需要 WRITE_EXTERNAL_STORAGE

标签 android android-permissions

我正在将我的 Android 应用程序的目标 SDK 版本升级到 23 (Android M),它具有新的运行时权限 (https://developer.android.com/training/permissions/requesting.html)。我的应用已声明 WRITE_EXTERNAL_STORAGE在它的 list 中,现在我必须在运行时请求它。当然,我只想在必要时请求它。

我对不同的存储类型有一个抽象,一种是通过普通文件 I/O(不是 Android 内容提供程序的东西)实现本地存储。在这个类中,我得到一个文件路径(如/mnt/sdcard/...或/data/data/...),在访问该文件(读写模式)之前,我想检查是否必须调用RequestPermissions WRITE_EXTERNAL_STORAGE。

所以问题是:确定是否可以在没有该权限的情况下读取和写入文件(例如,因为它在 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().

首先,我建议您避免使用 Intent 请求权限,因为这是最佳实践,可以大大改善用户体验。

如果您不能使用 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.

关于android - 如何知道何时需要 WRITE_EXTERNAL_STORAGE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34580638/

相关文章:

android - Android 13 Tiramisù 上异常权限请求行为

android - 三星 Galaxy J1 4G 上的 webRTC 应用程序崩溃

java - 我发起的共享 Activity 完成后,共享期间使用的应用程序将打开,而不是我自己的应用程序

Android 11 应用程序崩溃并出现 "The meta-data tag in your app' s AndroidManifest.xml 没有正确的值。预期为 12451000,但发现为 4323000"

java - 基于垂直搜索栏调整图像大小?

android - targetSdkVersion 低于 22 的下载管理器的安全异常

android - 从 list 中删除后,应用权限显示在应用设置中

Android:对主要 Activity 设置自定义权限 - 不好的做法?

java - 为什么 startActivityForResult() 方法在这种情况下不起作用

android - Playstore提示到 'Declare sensitive permissions'