任何人都可以分享代码(或指向我的 Android 示例代码)来帮助我将图像添加到媒体商店(图库)中的相册。
在我的应用程序中,我从我们的服务器下载图像,并使用相机(通过 Intent)拍摄新图像。
我想将这些图像组织在一个特定于应用程序的相册中,类似于 Facebook(和其他应用程序)应用程序所做的,保持相关图像井井有条。
不久前,我按照 Media Store API 文档进行了研究,但它对我不起作用....所以需要一些帮助。
谢谢
这是一种用于将图像存储在公共图片文件夹中的方法,其中包含自定义应用程序文件夹。
public void saveImageToExternal(String imgName, Bitmap bm) throws IOException {
//Create Path to save Image
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES+appFolder); //Creates app specific folder
path.mkdirs();
File imageFile = new File(path, imgName+".png"); // Imagename.png
FileOutputStream out = new FileOutputStream(imageFile);
try{
bm.compress(Bitmap.CompressFormat.PNG, 100, out); // Compress Image
out.flush();
out.close();
// Tell the media scanner about the new file so that it is
// immediately available to the user.
MediaScannerConnection.scanFile(context,new String[] { imageFile.getAbsolutePath() }, null,new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
} catch(Exception e) {
throw new IOException();
}
}
您可以使用:
MediaStore.Images.Media.insertImage(ContentResolver cr, Bitmap source, String title, String description);
而且我确定在某些子菜单中的某个地方http://developer.android.com/guide/显示了一个命令,要求 MediaStore 扫描确定的文件夹,我现在找不到它。
编辑: 找到它:
MediaScannerConnection.scanFile(Context context, String[] path, null, null);
这是我最终用来执行此操作的代码:
public static Uri addToTouchActiveAlbum( Context context, String title, String filePath ) {
ContentValues values = new ContentValues();
values.put( Media.TITLE, title );
values.put( Images.Media.DATE_TAKEN, System.currentTimeMillis() );
values.put( Images.Media.BUCKET_ID, filePath.hashCode() );
values.put( Images.Media.BUCKET_DISPLAY_NAME, Constants.TA_PHOTO_ALBUM_NAME );
values.put( Images.Media.MIME_TYPE, "image/jpeg" );
values.put( Media.DESCRIPTION, context.getResources().getString( R.string.product_image_description ) );
values.put( MediaStore.MediaColumns.DATA, filePath );
Uri uri = context.getContentResolver().insert( Media.EXTERNAL_CONTENT_URI , values );
return uri;
}
它适用于我在“getExternalStorage()”(/storage/sdcard0) 中的图像
我还想添加我在不同文件夹中的图像(我在 Context.getExternalCacheDir() 返回的文件夹下创建的 cacheDir)。问题:我不知道他们的 mime 类型(这有关系吗?),文件夹是不同位置的不同文件夹,名称不同 - 我不知道如何添加到“专辑”本身.....因为专辑名称似乎来自文件夹名称....
或者换一种说法:
values.put( Images.Media.BUCKET_DISPLAY_NAME, Constants.TA_PHOTO_ALBUM_NAME );
似乎没有任何效果?