【发布时间】:2019-06-07 13:05:33
【问题描述】:
我正在尝试在外部 SD 卡的根目录下创建一个文件夹(然后将我的应用生成的文件放入其中)。
我正在请求 WRITE_EXTERNAL_STORAGE 权限,但我认为在外部 SD 卡上实际写入是不够的。
这是我的代码:
private boolean authorized = false;
private final static int MY_PERMISSIONS_REQUEST_EXTERNAL_STORAGE = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
long debut = System.currentTimeMillis();
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
debut = System.currentTimeMillis();
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_EXTERNAL_STORAGE);
} else {
authorized = true;
}
while (!authorized) {
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
authorized = true;
} else if (System.currentTimeMillis() - debut >= 5000) {
this.finish();
System.exit(0);
}
}
//SDCARD path = "/storage/9016-4EF8"
new File("/storage/9016-4EF8"+"/MyApp").mkdirs();
}
我的代码适用于我的手机 (android 5.1),但不适用于我的平板电脑 (android 8.1)。看来我只有对最新版本的 android 的读取权限。 如何获得 SD 卡的写入权限?
我正在使用文件资源管理器应用程序 Xplore,并且该应用程序似乎需要其他权限才能修改 SD 卡上的文件:
“授予 Xplore 访问您在 sd 卡上的数据(包括照片和视频)的权限”
我怎样才能获得这个许可(如果可能的话)?
【问题讨论】:
-
"如何获得 SD 卡的写入权限?" -- 你不知道,特别是在 Android Q 及更高版本上。使用存储访问框架(例如,
ACTION_OPEN_DOCUMENT_TREE)并让用户选择内容的去向。 -
问题是我不希望用户能够选择,我需要我的文件在一个固定的位置,很容易在 SD 卡上找到
-
不,我的朋友,这是一种不好的做法,Google 不再允许这样做。用户必须选择文件夹。您可以做的是要求用户(使用对话框或其他方式)选择 SD 的根文件夹,从而使您可以访问该文件夹的任何子文件夹,这当然意味着整个 SD 卡。
-
好吧,我被要求以这种方式保存所有文件。如果我将返回的 URI 保存在某个地方,我会保留写的权利吗?
-
“我被要求以这种方式保存所有文件”——与提出要求的人交谈,并解释这不是 Android 上的工作方式。 “我需要我的文件在一个固定的位置,在 SD 卡上很容易找到”——欢迎您使用
getExternalFilesDirs()。如果返回 2 个以上的位置,则除第一个位置外,所有位置都将位于可移动媒体上。但是,它不会是可移动媒体的根。 “如果我将返回的 URI 保存在某个地方,我会保留写入的权利吗?” -- 您可以在ContentResolver上使用takePersistableUriPermissions()来获得从存储访问框架获得的Uri。