Android,在'App Container'中保存图片

时间:2016-01-15 14:17:37

标签: android

我不知道怎么说这个,但是在iOS术语中,如果我下载图像并将其保存在文档目录中,它会将其保存在Apps Container中,而其他应用程序和相机都看不到它滚动等。

我目前在Android中拥有它的方式,所有这些图像都可以在文件资源管理器和图库中看到。

我想知道如何以类似于iOS的方式保存这些图像并将它们隐藏在Apps自己的容器中。

有没有办法用context.MODE_PRIVATE或类似的东西创建文件夹?

这就是我现在所做的,它能解决这个问题吗?

public static Boolean saveToInternalStorage(Context context, Bitmap bitmap, String filename) {
        ContextWrapper cw = new ContextWrapper(context);

        //Path to /data/data/yourapp/app_data/imageDir
        File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);

        //Create imageDir
        File mypath = new File(directory, filename);

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(mypath);

            //Use the compress method on the BitMap object to write image to the OutputStream
            if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
               e.printStackTrace();
            }
        }

        return false;
    }

    public static Bitmap loadImageFromStorage(Context context, String filename) {
        ContextWrapper cw = new ContextWrapper(context);

        //Path to /data/data/yourapp/app_data/imageDir
        File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);

        try {
            File f = new File(directory, filename);
            Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f));


            return b;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        return null;
    }

2 个答案:

答案 0 :(得分:4)

阅读此article。这会有所帮助..

  

您可以将文件直接保存在设备的内部存储空间中。默认情况下,保存到内部存储的文件对应用程序是私有的,而其他应用程序无法访问它们(用户也无法访问)。当用户卸载您的应用程序时,将删除这些文件。

答案 1 :(得分:3)

  

我想知道如何以类似于iOS的方式保存这些图像并将它们隐藏在Apps自己的容器中。

将其写入getFilesDir()getCacheDir()internal storage上的其他位置。

  

这就是我现在所做的,它能解决这个问题吗?

ContextWrapper没用。如果您正在下载图像,我不知道为什么您要写入存储的Bitmap - 直接下载到存储。

但是,关于将图片保密为您的应用,getDir()也指向内部存储空间中的位置。