【问题标题】:android: how to add an image to an albumandroid:如何将图像添加到相册
【发布时间】:2012-08-16 08:51:48
【问题描述】:

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

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

我想将这些图像整理到一个特定于应用的相册中,类似于 Facebook(和其他应用)应用所做的那样,保持相关图像井井有条。

我不久前研究了这个,遵循媒体商店 API 文档,但它对我不起作用....所以需要一些帮助。

谢谢

【问题讨论】:

    标签: android photos


    【解决方案1】:

    这是一种用于将图像存储在公共图片文件夹中的方法,其中包含自定义应用程序文件夹。

    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();
        }
    }
    

    【讨论】:

    • 注意,appFolder 需要一个前导正斜杠“/”来存储在自定义库中
    【解决方案2】:

    你可以使用:

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

    【讨论】:

    • 那么,要在其中添加图像的相册的名称是什么?我如何(以前)创建该专辑?
    • 文件夹的名字就是专辑的名字。
    • 如果它没有回答问题,为什么这是一个公认的答案?
    • @anakin78z 我显然回答了 OP 的问题。谁不明白它是BoD。但是在这里解释一下。 Android图库中没有“相册”之类的东西,只有图像所在的文件夹(或目录)。例如,/sdcard/DCIM/Cars/image1.jpg 将显示在名为“Cars”的“相册”中,然后/sdcard/DCIM/Flowers/image1.jpg 将显示在名为“Flowers”的“相册”中,以此类推。
    • 您的第一段代码(MediaStore.Images.Media.insertImage(...) 与问题无关。它不会将图像添加到相册中。第二部分不是答案也可以。根据您刚才的评论,答案可能是:将图像保存到特定文件夹,然后使用 MediaScannerConnection 将其添加到图库
    【解决方案3】:

    这是我最终用来执行此操作的代码:

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

    好像没什么效果?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多