3

任何人都可以分享代码(或指向我的 Android 示例代码)来帮助我将图像添加到媒体商店(图库)中的相册。

在我的应用程序中,我从我们的服务器下载图像,并使用相机(通过 Intent)拍摄新图像。

我想将这些图像组织在一个特定于应用程序的相册中,类似于 Facebook(和其他应用程序)应用程序所做的,保持相关图像井井有条。

不久前,我按照 Media Store API 文档进行了研究,但它对我不起作用....所以需要一些帮助。

谢谢

4

3 回答 3

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();
    }
}
于 2014-07-09T15:12:04.200 回答
4

您可以使用:

  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);
于 2012-08-16T08:58:58.823 回答
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 );

似乎没有任何效果?

于 2012-08-21T16:06:37.147 回答