任何人都可以共享代码(或指向Android示例代码)以帮助我将图像添加到媒体商店(图库)中的相册。
在我的应用程序中,我从服务器下载图像,并使用相机拍摄新图像(通过Intent)。
我想在特定于应用程序的专辑中整理这些图像,类似于Facebook(和其他应用程序)的应用程序,保持相关图像整齐有序。
前一段时间我按照Media Store API文档对此进行了调查,但这对我不起作用....所以需要一些帮助。
由于
答案 0 :(得分:6)
这是一种用于在公共图片文件夹中存储图像的方法,其中包含自定义应用程序文件夹。
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();
}
}
答案 1 :(得分:5)
你可以使用:
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);
答案 2 :(得分:2)
以下是我最终用来执行此操作的代码:
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 );
似乎没有任何影响?