【发布时间】:2016-01-04 04:04:27
【问题描述】:
我正在将我的 Android 应用的 Target SDK 版本升级到具有新运行时权限 (https://developer.android.com/training/permissions/requesting.html) 的 23 (Android M)。我的应用程序在其清单中声明了WRITE_EXTERNAL_STORAGE,现在我必须在运行时请求。当然,我只想在必要时提出请求。
我对不同的存储类型有一个抽象,一种是通过普通的文件 I/O(不是 Android 内容提供程序的东西)实现本地存储。在这个类中,我得到一个文件路径(如 /mnt/sdcard/... 或 /data/data/...),在访问该文件(读写模式)之前,我想检查是否必须调用RequestPermissions 用于 WRITE_EXTERNAL_STORAGE。
所以问题是:确定是否可以在没有该权限的情况下读取和写入文件(例如,因为它在 getExternalFilesDir() 中)的最安全和最简单的方法是什么?
【问题讨论】:
-
“在这个类中,我得到了一个文件路径”——这个路径到底是从哪里来的?如果它来自代码中的其他地方,那么无论您在哪里创建路径,您都知道它是否在外部存储上。如果路径来自您的应用程序外部(例如,
Uri上的Intent),那么恕我直言,您最好在收到这样的路径之前询问用户的许可,例如在第一次运行你的应用程序。 -
两种方式都是可能的:路径可以在应用程序内部创建,但我也从 Intents 打开文件。此外,我必须处理在以前版本的应用程序中使用并存储在共享首选项中的路径。我当然不能问所有用户,因为许多用户不使用任何本地存储,而只使用云存储。但是我可以问他们第一次使用不在应用程序内部目录中的任何本地文件。我希望有更好的解决方案。
-
您找到答案了吗?我正在尝试为 API 23 更新我的应用程序并遇到同样的问题,我如何判断路径是否为外部路径?
标签: android android-permissions