gpt4 book ai didi

java - `getExternalStorageDirectory()` 问题 - Android

转载 作者:行者123 更新时间:2023-12-02 07:33:35 24 4
gpt4 key购买 nike

我正在编写一个 Android 应用程序,它可以拍摄一些照片,并希望将它们全部保存在与我的应用程序关联的唯一目录中。

此目录应该可以从标准图库访问,以便用户稍后(当应用程序不一定运行时)检查拍摄的图片。

我的问题是,每个不同的手机供应商都有不同的 Android 版本,画廊的路径也不同。例如:

Environment.getExternalStorageDirectory() + Environment.DIRECTORY_PICTURES +"/myFolder"

将在 Samsung Galaxy Nexus 上工作运行android 4.1.1 ,然后Asus Transformer Pad运行android 4.0.3 ,但不在 HTC Desire 上运行android 2.3.5 .

当尝试在指定路径中保存新目录时,这将导致我的应用程序崩溃,如下所示:

boolean success = false;
myFolder = new File( Environment.getExternalStorageDirectory() + Environment.DIRECTORY_PICTURES + "/myFolder" );

if( myFolder.exists() ){
//do nothing
}else{

success = dvaFolder.mkdir();

if( success ){
// Do something on success
/*
* folder has been created
*/

} else {
// Do something else on failure
/*
* folder creation failed
*/
throw new RuntimeException("File Error in writing new folder");
}
}

How can I write a directory that will be accessible in gallery for all different vendors and android versions?

注意:

Logcat 没什么用,因为它只是返回运行时异常。

最佳答案

我对蓝牙文件夹也有同样的问题,我创建了两种方法来通过遍历手机上的整个文件结构来搜索手机上的蓝牙文件夹。我写的代码在下面,有点脏,但在我的情况下效果很好

public List<File> folderSearchBT(File src, String folder) {

List<File> result = new ArrayList<File>();

File[] filesAndDirs = src.listFiles();


if (filesAndDirs != null && filesAndDirs.length > 0) {
List<File> filesDirs = Arrays.asList(filesAndDirs);

for (File file : filesDirs) {
result.add(file); // always add, even if directory
if (file.isDirectory()) {
List<File> deeperList = folderSearchBT(file, folder);
result.addAll(deeperList);
}
}
}
return result;
}

在这个方法中使用上面的方法:

public String searchForGallery() {

String splitchar = "/";
File root = Environment.getExternalStorageDirectory();
List<File> btFolder = null;
String folder = "gallery"; //your foldername to search for..
btFolder = folderSearchBT(root, folder);

if(btFolder.size() < 1)
Log.i("btFolder: ", "Empty");

for (int i = 0; i < btFolder.size(); i++) {

String g = btFolder.get(i).toString();

String[] subf = g.split(splitchar);

String s = subf[subf.length - 1].toUpperCase();

boolean equals = s.equalsIgnoreCase(folder);

if (equals)
return g;
}
return null; //not found
}

通过说代码很脏,我的意思是我可以将其写得更紧凑,并且通过这样做还有另一个问题:如果有两个名为蓝牙的文件夹,我就被卡住了..

我希望我正确理解了你的问题。

关于java - `getExternalStorageDirectory()` 问题 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598214/

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