Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 1194|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    前天 22:25
  • 签到天数: 790 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    722766
    发表于 2021-6-3 14:12:03 | 显示全部楼层 |阅读模式
    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;
        }
    }

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-12 16:36 , Processed in 1.020859 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表