android:如何将图像添加到相册中

时间:2012-08-16 08:51:49

标签: android photos

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

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

我想在特定于应用程序的专辑中整理这些图像,类似于Facebook(和其他应用程序)的应用程序,保持相关图像整齐有序。

前一段时间我按照Media Store API文档对此进行了调查,但这对我不起作用....所以需要一些帮助。

由于

3 个答案:

答案 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 );

似乎没有任何影响?