gpt4 book ai didi

安卓开发 : Accessing external SD card directly on Samsung devices (with extSdCard path)?

转载 作者:搜寻专家 更新时间:2023-11-01 08:36:54 24 4
gpt4 key购买 nike

我正在学习 Android 开发,因此对一些 Android 技术概念还比较陌生,但我确实拥有深厚的开发背景。

我正在编写一个应用程序,希望能够直接访问用户 SD 卡上的文件。测试设备是三星 Galaxy Tab 4。

三星似乎使用自定义方法安装 SD 卡,将其放置在 /storage/extSdCard 而不是更传统的 /sdcard

在我的应用程序中,我使用方法 Environment.getExternalStoragePublicDirectory 方法请求存储路径,并获得指向内部存储而不是 SD 卡的路径。 (/storage/sdcard0/...)

当我尝试直接访问 SD 卡存储 (/storage/extSdCard/...) 时,出现错误 open failed: EACCES (Permission denied) .

此设备(可能还有任何用户的设备)的内部存储器可用存储空间非常有限。 (此设备内部只有 8GB 的​​存储空间,其中大部分都被应用程序占用了。)此外,我希望潜在的应用程序用户能够直接将文件放到他们的 MicroSD 卡上,而不必使用 Android 文件传输工具来传输将内容加载到应用程序中...

我可以通过任何方式直接从三星设备上运行的应用程序访问外部 SD 卡吗?

测试代码:

public void doTest()
{
FileWriter fw;

File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "test.txt");
Log.i("file","Trying to write a file at: "+f.getPath());
try {
fw = new FileWriter(f);
fw.write("You got a file.");
fw.flush();
fw.close();
Log.i("file", "Successfully wrote the file.");
}
catch (IOException e)
{
Log.i("file_error", "Could not write the file.");
Log.i("file_error",e.getMessage());
}

f = new File("/storage/extSdCard/Documents", "test.txt");
Log.i("file","Trying to write a file at: "+f.getPath());
try {
fw = new FileWriter(f);
fw.write("You got a file.");
fw.flush();
fw.close();
Log.i("file", "Successfully wrote the file.");
}
catch (IOException e)
{
Log.i("file_error", "Could not write the file.");
Log.i("file_error",e.getMessage());
}
}

最佳答案

I am writing an app that I want to be able to directly access files on the user's SD card.

这在 Android 4.4+ 上是不可能的,因为大多数直接访问 removable storage已被削减。异常(exception)情况包括预安装的应用程序和在已获得 root 权限的设备上运行并使用 super 用户权限的应用程序。

Samsung appears to use a custom method of mounting the SD card, placing it at /storage/extSdCard rather than the more traditional /sdcard.

/sdcard自 Android 2.x 以来,在大多数设备上都没有用于可移动媒体。

In my app, I used the method Environment.getExternalStoragePublicDirectory method to request the path for storage, and was given a path which points to the internal storage rather than the SD card. (/storage/sdcard0/...)

不,getExternalStoragePublicDirectory()指向 external storage .外部存储不是 removable storage . Internal storage完全是另一回事。

Any way I can access the external SD card directly from an app running on a Samsung device?

欢迎您使用 getExternalFilesDirs() , getExternalCacheDirs() , 和 getExternalMediaDirs() Context 上的方法.注意复数方法名称。如果这些方法返回 2+ 个条目,则第二个和后续条目是您可以读取和写入的可移动存储上的位置,不需要任何权限。但是,您无法通过这种方式访问​​所有可移动存储,只能访问特定于您的应用的位置。

也欢迎您使用the Storage Access Framework ,允许用户选择内容的去向,包括将其放置在可移动存储上。但是,您不再使用文件和路径,而是使用内容和 Uri值(value)观。

N Developer Preview 为“Scoped Directory Access”提供了另一个选项,它支持可移动存储。但是,目前(2016 年 3 月)这仍然是开发人员预览的一部分。

关于安卓开发 : Accessing external SD card directly on Samsung devices (with extSdCard path)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35947286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com