当前位置: 移动技术网 > IT编程>移动开发>Android > Android--解决图片保存到相册显示1970年1月1日 8:00的问题

Android--解决图片保存到相册显示1970年1月1日 8:00的问题

2018年11月08日  | 移动技术网IT编程  | 我要评论

根本晴美,虚空武界,草船借箭教学设计

import android.content.context;
import android.content.intent;
import android.database.cursor;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.graphics.canvas;
import android.graphics.matrix;
import android.graphics.paint;
import android.graphics.rect;
import android.media.mediascannerconnection;
import android.net.uri;
import android.os.environment;
import android.provider.mediastore;
import android.view.view;


public class pictureutils {

    private static string tag = pictureutils.class.getsimplename();

    private static int code_width = 60;
    private static int code_height = 60;

    private pictureutils() {

    }

    /**
     * 保存一张或者多张图片到图库
     */
    public static void saveimagelisttogallery(final baseactivity context,
            final list<string> imglist, final onsaveimgcallback callback) {

        if (context == null) {
            logutils.dtag(tag, "context 不能为null");
            return;
        }

        rxpermissionsutils.getinstance()
                .requestpermission(context, rxpermissionsutils.read_and_write_permission,
                        new rxpermissionsutils.onpermissionrequestcallback() {
                            @override
                            public void onsuccess() {
                                if (imglist == null) {
                                    logutils.dtag(tag, "图片数组为 null");
                                    return;
                                }

                                // 保存图片到图库
                                saveimagelisttogalleryprivate(context, imglist, callback);

                            }

                            @override
                            public void onfail() {
                                toastutils.showshort("请在设置授予应用存储权限^_^");
                                permissionutils.launchappdetailssettings();
                            }
                        });

    }

    /**
     * 保存多张图片
     */
    private static void saveimagelisttogalleryprivate(baseactivity context, list<string> imglist,
            final onsaveimgcallback callback) {

        observable.just(imglist)
                .observeon(schedulers.io())
                .flatmap(new function<list<string>, observablesource<boolean>>() {
                    @override
                    public observablesource<boolean> apply(list<string> strings) throws exception {

                        for (string filepath : strings) {

                            if (filepath.startswith("http://") || filepath.startswith("https://")) {

                                bitmap bmp = glide.with(baseapplication.getinstance())
                                        .asbitmap()
                                        .load(filepath)
                                        .submit()
                                        .get();

                                saveimagetogallery(baseapplication.getinstance(), bmp, filepath);

                            } else {

                                bitmap bmp = bitmapfactory.decodefile(filepath);

                                saveimagetogallery(baseapplication.getinstance(), bmp, filepath);
                            }

                        }

                        return observable.just(true);
                    }
                })
                .observeon(androidschedulers.mainthread())
                .subscribe(new observer<boolean>() {
                    disposable md;

                    @override
                    public void onsubscribe(disposable d) {
                        md = d;
                        if (callback != null) {
                            callback.onsavestart();
                        }
                    }

                    @override
                    public void onnext(boolean aboolean) {
                        toastutils.showshort("图片已成功保存到系统相册^_^");
                        if (callback != null) {
                            callback.onsavesuccess();
                        }
                    }

                    @override
                    public void onerror(throwable e) {
                        if (md != null) {
                            md.dispose();
                        }
                        if (callback != null) {
                            callback.onsavefail();
                        }
                    }

                    @override
                    public void oncomplete() {
                        if (md != null) {
                            md.dispose();
                        }
                    }
                });


    }

    /**
     * 保存 bitmap 到相册 获得路径
     */
    public static string saveimagetogallery(context context, bitmap bmp, string imageurl) {

        if (!sdcardutils.issdcardenablebyenvironment()) {
            logutils.dtag(tag, "内存卡不可用");
            return null;
        }

        // 首先保存图片
        file appdir = new file(environment.getexternalstoragedirectory().getabsolutepath(),
                networkconstants.filekey.commonlib_share_code_dir_name);// 获取文件存储路径

        if (!appdir.exists()) {
            boolean iscreate = appdir.mkdir();
            if (!iscreate) {
                return null;
            }
        }

        // 创建文件 截取,取出名字
        string url_truncated = string.valueof(system.currenttimemillis());
        string filename = "mryt_share_code" + "_" + url_truncated;
        file file = new file(appdir, filename);
        fileutils.deletefile(file);
        if (fileutils.isfileexists(file)) {
            logutils.dtag(tag, file.getabsolutepath());
            return file.getabsolutepath();
        }
        try {
            fileoutputstream fos = new fileoutputstream(file);
            bmp.compress(bitmap.compressformat.jpeg, 100, fos);
            fos.flush();
            fos.close();
            // 插入图库
            /**mediastore.images.media
                    .insertimage(context.getcontentresolver(), file.getabsolutepath(), filename,
                            string.valueof(system.currenttimemillis()));*/
        } catch (filenotfoundexception e) {
            e.printstacktrace();
        } catch (ioexception e) {
            e.printstacktrace();
        }
        // 最后通知图库更新

        /**mediascannerconnection.scanfile(context, new string[]{file.getabsolutepath()}, null,
                new mediascannerconnection.onscancompletedlistener() {
                    @override
                    public void onscancompleted(string path, uri uri) {

                    }
                });*/
        try {
            savephototomedia(context, file, filename);
        } catch (filenotfoundexception e) {
            e.printstacktrace();
        }
        return file.getabsolutepath();
    }

    /**
     * 保存 bitmap 到相册 获得路径 不传递文件名称 用时间后缀
     */
    public static string saveimagetogallery(context context, bitmap bmp) {
        // 首先保存图片
        file appdir = context.getexternalfilesdir(
                networkconstants.filekey.commonlib_share_code_dir_name);// 获取文件存储路径
        if (appdir != null && !appdir.exists()) {
            boolean iscreate = appdir.mkdir();
            if (!iscreate) {
                return null;
            }
        }
        if (!sdcardutils.issdcardenablebyenvironment()) {
            logutils.dtag(tag, "内存卡不可用");
            return null;
        }

        // 创建文件 截取,取出名字
        string url_truncated = string.valueof(system.currenttimemillis());
        string filename = "mryt_share_code" + "_" + url_truncated;
        file file = new file(appdir, filename);
        if (fileutils.isfileexists(file)) {
            logutils.dtag(tag, file.getabsolutepath());
            return file.getabsolutepath();
        }
        try {
            fileoutputstream fos = new fileoutputstream(file);
            bmp.compress(bitmap.compressformat.jpeg, 100, fos);
            fos.flush();
            fos.close();
            // 插入图库
            /**mediastore.images.media
             .insertimage(context.getcontentresolver(), file.getabsolutepath(), filename,
             string.valueof(system.currenttimemillis()));*/
        } catch (filenotfoundexception e) {
            e.printstacktrace();
        } catch (ioexception e) {
            e.printstacktrace();
        }
        // 最后通知图库更新
//        context.sendbroadcast(new intent(intent.action_media_scanner_scan_file, uri.fromfile(file)));
        /**mediascannerconnection.scanfile(context, new string[]{file.getabsolutepath()}, null,
         new mediascannerconnection.onscancompletedlistener() {
        @override public void onscancompleted(string path, uri uri) {
        }
        });*/

        try {
            savephototomedia(context, file, filename);
            toastutils.showshort("图片已成功保存到相册");
        } catch (filenotfoundexception e) {
            e.printstacktrace();
            toastutils.showshort("图片保存失败");
        }
        return file.getabsolutepath();
    }

    public static bitmap getbitmapfromview(context context, view view) {
        view.setdrawingcacheenabled(true);
        //启用drawingcache并创建位图
        view.builddrawingcache();
        //创建一个drawingcache的拷贝,因为drawingcache得到的位图在禁用后会被回收
        bitmap bitmap = bitmap.createbitmap(view.getdrawingcache());
        //禁用drawingcahce否则会影响性能
        view.setdrawingcacheenabled(false);
        return bitmap;
    }

    //图片上绘制文字
    public static bitmap drawtexttobitmap(bitmap bitmap, string text,
            paint paint, rect bounds, int paddingleft, int paddingtop) {
        android.graphics.bitmap.config bitmapconfig = bitmap.getconfig();

        paint.setdither(true); // 获取跟清晰的图像采样
        paint.setfilterbitmap(true);// 过滤一些
        if (bitmapconfig == null) {
            bitmapconfig = android.graphics.bitmap.config.argb_8888;
        }
        bitmap = bitmap.copy(bitmapconfig, true);
        canvas canvas = new canvas(bitmap);
        canvas.drawtext(text, paddingleft, paddingtop, paint);
        return bitmap;
    }


    public static bitmap setimgsize(bitmap bm, int newwidth, int newheight) {
        // 获得图片的宽高.
        int width = bm.getwidth();
        int height = bm.getheight();
        // 计算缩放比例.
        float scalewidth = ((float) newwidth) / width;
        float scaleheight = ((float) newheight) / height;
        // 取得想要缩放的matrix参数.
        matrix matrix = new matrix();
        matrix.postscale(scalewidth, scaleheight);
        // 得到新的图片.
        return bitmap.createbitmap(bm, 0, 0, width, height, matrix, true);
    }

    // 保存图片的回调
    public interface onsaveimgcallback {

        void onsavestart();

        void onsavesuccess();

        void onsavefail();
    }

    public static void savephototomedia(context context, file file, string filename)
            throws filenotfoundexception {
        string uristring = mediastore.images.media
                .insertimage(context.getcontentresolver(), file.getabsolutepath(), filename, null);
//        string uristring = mediastore.images.media.insertimage(context.getcontentresolver(), bitmap, null, null);
        file file1 = new file(getrealpathfromuri(uri.parse(uristring), context));
        updatephotomedia(file1, context);
    }

    //更新图库
    private static void updatephotomedia(file file, context context) {
        intent intent = new intent();
        intent.setaction(intent.action_media_scanner_scan_file);
        intent.setdata(uri.fromfile(file));
        context.sendbroadcast(intent);
    }

    //得到绝对地址
    private static string getrealpathfromuri(uri contenturi, context context) {
        string[] proj = {mediastore.images.media.data};
        cursor cursor = context.getcontentresolver().query(contenturi, proj, null, null, null);
        if (cursor == null) {
            return "";
        }
        int column_index = cursor.getcolumnindexorthrow(mediastore.images.media.data);
        cursor.movetofirst();
        string filestr = cursor.getstring(column_index);
        cursor.close();
        return filestr;
    }
}

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网