保存在内部存储中的位图不会显示在Gallery上

时间:2015-11-09 23:19:32

标签: java android bitmap android-gallery

我创建了一个简单的应用程序来保存内部存储中的位图,并能够像任何其他图像一样在Android库中显示这个位图。

问题是:保存后它没有在画廊中显示......我不知道我做错了什么。 (我在模拟器上测试它)

这是我的类来处理Bitmap的保存。当我点击一个按钮保存位图时,我的主要活动中使用了这个Saver类。

public class Saver {

private Context mContext;
private String mNameOfFolder = "Storager";
private String mNameOfFile = "Quote";

public void saveImage(Context context, Bitmap imageToSave) {
    mContext = context;

    // Create the directory
    File dir = mContext.getDir(mNameOfFolder, Context.MODE_PRIVATE);
    String filePath = dir.getAbsolutePath();

    // Get the current date and time to attach to the name of the image
    String currentDateAndTime = getCurrentDateAndTime();

    if(!dir.exists()) {
        dir.mkdirs();
    }

    File file = new File(dir, mNameOfFile + currentDateAndTime + ".jpg");

    try {
        FileOutputStream out = new FileOutputStream(file);
        imageToSave.compress(Bitmap.CompressFormat.JPEG, 100, out);

        out.flush();
        out.close();

        galleryAddPic(file);

        successSave();
    } catch (FileNotFoundException e) {
        Log.d("d", "file not found");
        unableToSave();
    } catch (IOException e) {
        Log.d("d", "IO Exception");
        unableToSave();
    }
}

private void galleryAddPic(File file) {
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    Uri contentUri = Uri.fromFile(file);
    mediaScanIntent.setData(contentUri);
    mContext.sendBroadcast(mediaScanIntent);
}

private String getCurrentDateAndTime() {
    Calendar calendar = Calendar.getInstance();
    // Setting format of the time
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
    // Getting the formated date as a string
    String formattedDate = dateFormat.format(calendar.getTime());

    return formattedDate;
}

}

我甚至添加了android开发者网站here提供的方法galleryAddPic(),以便能够将图像添加到Media Provider的数据库中,使其在Android Gallery应用程序和其他应用程序中可用。

1 个答案:

答案 0 :(得分:2)

第三方应用(包括MediaStore)无法访问您应用的internal storage。如果您希望第三方应用有权访问该文件,请使用external storage

另外,我不知道你为什么在这里创建ContextWrapper。如果您的方法需要Context(例如,当前代码中为getDir()),请在传递给您方法的Context上调用它们。