国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Android 圖片保存到相冊不顯示的解決方案(兼容Android 10及更高版本)

瀏覽:5日期:2022-09-19 10:31:56
前言

寫了一個demo,簡單邏輯就是:在一個圖片上添加一行文字或者是水印,并且保存到系統相冊,也就是我們手機上的圖庫。前面編輯圖片添加水印都沒有問題,到后面保存到系統相冊出現了問題:顯示不出來圖片。

問題

在 Android 10 之前保存系統相冊的三步驟:

保存圖片到手機 把圖片插入到手機圖庫 發廣播更新

代碼如下:

public static void savePhotoAlbum(Context context, Bitmap bmp) { // 首先保存圖片 File appDir = new File(Environment.getExternalStorageDirectory(), 'Boohee'); if (!appDir.exists()) {appDir.mkdir(); } String fileName = System.currentTimeMillis() + '.jpg'; File file = new File(appDir, fileName); try {FileOutputStream fos = new FileOutputStream(file);bmp.compress(CompressFormat.JPEG, 100, fos);fos.flush();fos.close(); } catch (FileNotFoundException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace();}// 其次把文件插入到系統圖庫 try {MediaStore.Images.Media.insertImage(context.getContentResolver(),file.getAbsolutePath(), fileName, null); } catch (FileNotFoundException e) {e.printStackTrace(); } // 最后通知圖庫更新 context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse('file://' + path)));}

出現的問題:圖片不顯示,也就是說沒有更新到系統圖庫中。

細心的小伙伴會發現,上段代碼有兩處地方廢棄的方法:

MediaStore.Images.Media.insertImage(context.getContentResolver(),file.getAbsolutePath(), fileName, null);

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse('file://' + path)));解決問題

下面是解決上面的問題,并兼容 Android10 版本:

/** * 添加水印并保存到系統相冊 */ private void imgMerge() {new Thread(() -> { try {Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test);File file = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), 'newFile.jpg');if (!file.exists()) { file.createNewFile();}//添加水印文字位置。Bitmap newBitmap = addTextWatermark(bitmap, '測試demo示例');//保存到系統相冊savePhotoAlbum(newBitmap, file); } catch (Exception e) {e.printStackTrace(); }}).start(); }/** * 保存到相冊 * * @param src 源圖片 * @param file 要保存到的文件 */ private void savePhotoAlbum(Bitmap src, File file) {if (isEmptyBitmap(src)) { return;}//先保存到文件OutputStream outputStream;try { outputStream = new BufferedOutputStream(new FileOutputStream(file)); src.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); if (!src.isRecycled()) {src.recycle(); }} catch (FileNotFoundException e) { e.printStackTrace();}//再更新圖庫if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DISPLAY_NAME, file.getName()); values.put(MediaStore.MediaColumns.MIME_TYPE, getMimeType(file)); values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM); ContentResolver contentResolver = getContentResolver(); Uri uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); if (uri == null) {return; } try {outputStream = contentResolver.openOutputStream(uri);FileInputStream fileInputStream = new FileInputStream(file);FileUtils.copy(fileInputStream, outputStream);fileInputStream.close();outputStream.close(); } catch (IOException e) {e.printStackTrace(); }} else { MediaScannerConnection.scanFile( getApplicationContext(), new String[]{file.getAbsolutePath()}, new String[]{'image/jpeg'}, (path, uri) -> {// Scan Completed });} }

發送廣播和插入MediaProvider兩種方式添加圖片到相冊,這兩種方式已經官方廢棄了。在 Android 10版本以及更高版本使用上面的方法,才能有效解決不顯示圖片的問題。

做個記錄!

以上就是Android 圖片保存到系統相冊不顯示的解決方案(兼容Android 10及更高版本)的詳細內容,更多關于Android 圖片保存到相冊不顯示的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: selaoban在线视频免费精品 | 99在线精品视频 | 久久狠狠| 在线a网站 | 日本一区三区二区三区四区 | 欧美日韩一区二区三区在线播放 | 又黄又www | 精品视频亚洲 | 亚洲国产精品线播放 | 国产深夜福利视频网站在线观看 | 一区二区国产精品 | 中文 日本 免费 高清 | 频黄| 亚洲美女黄色片 | 欧美国产一区二区 | 欧美特级一级毛片 | 国产精品三级手机在线观看 | 久久91精品国产91 | 亚洲香蕉影院 | 久久影院yy6080 | 免费看一级欧美毛片 | 久久精品国产免费一区 | 自拍视频精品 | 国产孕妇孕交视频在线观看 | 伊人久久国产免费观看视频 | 久久91亚洲精品中文字幕奶水 | 精品久久久久久中文字幕网 | 免费人成在观看 | 九九精彩视频在线观看视频 | www亚洲视频| 99久久精品国产国产毛片 | 欧美一级毛片一 | 亚洲伊人成人 | 日韩一级精品久久久久 | 国产日韩久久久精品影院首页 | 台湾三级在线播放 | 免费精品一区二区三区在线观看 | 久久综合99re88久久爱 | 久久免费99精品久久久久久 | 国产精品成aⅴ人片在线观看 | 91理论片午午伦夜理片久久 |