如何使用Camera类捕获到系统默认相册

时间:2014-02-21 01:20:18

标签: android

我刚完成我的照片应用程序使用“相机”类相关工具。 但是我无法在默认的Android相册应用中看到我的捕捉照片。 这是我从Camera.takePicture回调的代码段:

    PictureCallback jpegPictureCallback = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] arg0, Camera arg1) {

        Bitmap bmp = BitmapFactory.decodeByteArray(arg0, 0, arg0.length);

        String fileName = Environment.getExternalStorageDirectory()
                .toString()
                + File.separator
                + "DCIM" 
                + File.separator 
                + "Camera"
                + File.separator
                + "PicTest_" + System.currentTimeMillis() + ".jpg";
        File file = new File(fileName);
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdir();
        }

        try {
            BufferedOutputStream bos = new BufferedOutputStream(
                    new FileOutputStream(file));
            bmp.compress(Bitmap.CompressFormat.JPEG, 80, bos);
            bos.flush();
            bos.close();
            Toast.makeText(MainPage.this, "Picture work " + fileName + "!",
                    Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            // e.printStackTrace();
            Toast.makeText(MainPage.this, "Picture Failed" + e.toString(),
                    Toast.LENGTH_LONG).show();
        }
    };
};

请提出任何想法,谢谢。

1 个答案:

答案 0 :(得分:1)

使用MediaScannerConnection告诉MediaStore索引您的照片。

另外,请使用getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),而不是您正在使用的硬编码子目录。

另外,不是将byte[]解码为Bitmap,而是将其重新编码为byte[],您可以考虑只保存byte[]

另外,在主应用程序线程AFAIK上调用onPictureTaken();请进行图像处理并在后台线程中保存到磁盘。