Android开发之App拍照系统相册展示

来源:互联网 发布:编程就业培训中心 编辑:程序博客网 时间:2024/04/30 00:45

需求:客户提出一个需求,App拍照的照片需要直接在系统相册中可以查看得到。

解决方案:

第一次尝试:刚开始想到的是网上这三种方式:http://blog.csdn.net/qq_34157407/article/details/51407992
发现使用广播或者插入图库都无法实现在系统相册中查看。我的适配机型是:魅族MX5.

第二次尝试:当没有合适的方法的时候,就自己动手推测分析。经过几次的测试系统相册所关联的逻辑,以及系统照相机拍照后的照片存储规则。推测将照片存储在DCIM文件夹中,相册才会加载的首要条件。最终,经过测试,得出关于我适配机型的解决方案:
1、拍照后照片存储于系统相册关联的文件夹DCIM下(区别与其他方法的地方);
2、发送广播,通知系统相册刷新。

代码如下:

保存照片并通知相册更新广播:

// 将照片插入到系统相册BitmapUtils.saveBitmap(addbmp, ru.fileName,Environment.getExternalStorageDirectory() + "/DCIM/");context.sendBroadcast(new Intent(                        Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri                                .fromFile(new File(Environment                                        .getExternalStorageDirectory()                                        + "/DCIM/" + ru.fileName + ".jpg"))));

保存照片到指定路径下:

/**     * 保存图片到指定的Path路径下     *      * @author vaecer     * @param bm     *            图片bitmap     * @param picName     *            图片名字     * @param path     *            图片保存的路径     */    public static void saveBitmap(final Bitmap bm, final String picName, final String path) {        new Thread(new Runnable() {            @Override            public void run() {                // TODO Auto-generated method stub                try {                    // String realPath =                    // Environment.getExternalStorageDirectory() + path;                    File f = new File(path, picName + ".jpg");                    if (f.exists()) {                        f.delete();                    }                    FileOutputStream out = new FileOutputStream(f);                    bm.compress(Bitmap.CompressFormat.JPEG, 90, out);                    out.flush();                    out.close();                } catch (FileNotFoundException e) {                    e.printStackTrace();                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }
阅读全文
1 0