我需要从用户选择的SD卡中删除图像.在我的活动中,在用户从图库中选择图像后,我执行以下代码:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Utils.imgUri = data.getData();
Utils.imgPath = getPath(Utils.imgUri);
File file = new File(Utils.imgPath);
boolean deleted = file.delete();
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中getPath方法是:
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
if(cursor!=null){
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
else return null;
}
Run Code Online (Sandbox Code Playgroud)
图像被正确删除,但在图库中仍然保留已删除图像的预览.当我点击它时,加载了一个黑色图像..
那么,在从我的应用代码中删除一些图像后,如何更新图库预览?
我的应用程序要求使用手动将文件从PC复制到我的应用程序在其中创建的子目录中的SD卡(或者我将在根目录中查找它).到目前为止,这么好(大多数人没有问题,除非他们试图在手机仍然连接时运行我的应用程序,然后问为什么它告诉他们"SD卡未安装":-)).
无论如何,我想知道三星Galaxy手机是如何工作的,因为我的理解是他们有一个外部和内部SD卡.我的应用程序当前调用"Environment.getExternalStorageDirectory()"; 这会返回EXTERNAL卡的根目录吗?
此外,当用户将设备安装到他们的PC上时,它看起来像什么?他们是看到两个已安装的驱动器,还是仅将外部卡作为驱动器或其他内容?
在我的Android应用程序中,我试图在SD卡上创建以下文件夹:
/mnt/sdcard/OSGiComponents/admin/felix-cache/
Run Code Online (Sandbox Code Playgroud)
这是代码:
File cacheDir =
new File( Environment.getExternalStorageDirectory().getAbsolutePath() +
"/OSGiComponents/admin/felix-cache/" );
// Create the folder
cacheDir.mkdirs();
// Check if it exists
if ( ! cacheDir.exists() ) {
Log.e ( "Debug" , "Cache directory cannot be created" );
}
Run Code Online (Sandbox Code Playgroud)
我在android清单文件的清单标签下有WRITE_STORAGE_PERMISSION.我能够在SD卡上创建其他文件夹和文件而不会出现问题.该应用程序适用于以下手机:
然而,在运行Ice Cream Sandwich(4.0.4)的三星Galaxy Nexus手机(无根)上,该目录被创建为零大小的文件,可以在Astro中看到.exists()调用返回false.

我怀疑这是一个权限问题,但我不确定它是什么,以及为什么创建一个0字节文件而exists()返回false.代码中没有其他地方我创建这个文件.
关于可能出现什么问题的任何建议?
谢谢 :)
更新:我想我已经确定了问题,请看我发布的答案.
我已经看到一些应用程序,如海豚浏览器(不是高清版本,正常的)利用缓存到SD的webview但我似乎无法弄清楚如何做到这一点,有谁知道如何做到这一点或指出我正确的方向?任何帮助是极大的赞赏!谢谢 :)
一些Android 2.x平板电脑,如HTC Flyer和三星Galaxy Tab,支持内部平板电脑存储和外部SD卡.例如,在我的传单上,/sdcard并且/sdcard2是独立的,前者代表平板电脑的"内部存储".
如果我使用Environment.getExternalStorageDirectory(),似乎没有任何关于将返回哪些存储位置的设置规则.在使用中getExternalStorageDirectory(),我担心的是我只能找到存储在两个存储位置之一上的媒体.
一种解决方案是硬编码扫描/sdcard*到应用程序,但这假设所有设备将使用它作为命名方案,我不认为这是一个安全的假设.
是否有记录在Android 2.x上扫描和使用多个SD卡/存储位置的方法?
我的目标实际上是在平板电脑上找到所有有声读物,所以我想以/sdcard*/Audiobooks一些记录的方式查找和使用所有有声读物.