Android儲存圖片到系統相簿
最近有些使用者反映儲存圖片之後在系統相簿找不到儲存的圖片,遂決定徹底檢視並解決下。
Adnroid中儲存圖片的方法可能有如下兩種:
第一種是自己寫方法,如下程式碼:
public static File saveImage(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();
}
}
以上程式碼便是將Bitmap儲存圖片到指定的路徑/sdcard/Boohee/下,檔名以當前系統時間命名,但是這種方法儲存的圖片沒有加入到系統相簿中
第二種是呼叫系統提供的插入相簿的方法:
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, “title”, “description”);
呼叫以上系統自帶的方法會把bitmap物件儲存到系統相簿中,但是這種方法無法指定儲存的路徑和名稱,上述方法的title、description引數只是插入資料庫中的欄位,真實的圖片名稱系統會自動分配。
看似上述第二種方法就是我們要用到的方法,但是可惜的呼叫上述第二種插入相簿的方法圖片並沒有立刻顯示在相簿中,而我們需要立刻更新系統相簿以便讓使用者可以立刻檢視到這張圖片。
更新系統相簿的方法
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse(“file://”+ Environment.getExternalStorageDirectory())));
或者還有如下方法:
final MediaScannerConnection msc = new MediaScannerConnection(mContext, new MediaScannerConnectionClient() {
public void onMediaScannerConnected() {
msc.scanFile(“/sdcard/Boohee/image.jpg”, “image/jpeg”);
}
public void onScanCompleted(String path, Uri uri) {
Log.v(TAG, “scan completed”);
msc.disconnect();
}
});
上面程式碼的圖片路徑不管是通過自己寫方法還是系統插入相簿的方法都可以很容易的獲取到。
終極完美解決方案
那麼到這裡可能有人又會問了,如果我想把圖片儲存到指定的資料夾,同時又需要圖片出現在相簿裡呢?答案是可以的,sdk還提供了這樣一個方法:
MediaStore.Images.Media.insertImage(getContentResolver(), “image path”, “title”, “description”);
上述方法的第二個引數是image path,這樣的話就有思路了,首先自己寫方法把圖片指定到指定的資料夾,然後呼叫上述方法把剛儲存的圖片路徑傳入進去,最後通知相簿更新。
所以寫了一個方法,完整的程式碼如下:
public static void saveImageToGallery(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)));
}
相關文章
- iOS開發-新建相簿並儲存圖片到該相簿iOS
- 短視訊帶貨原始碼,儲存圖片到相簿/相簿原始碼
- 小程式–儲存圖片到相簿功能實現
- Android將view儲存為圖片並放在相簿中AndroidView
- 淘寶圖片儲存系統架構架構
- 儲存圖片到SD卡SD卡
- 小程式生成二維碼圖片儲存相簿並分享到朋友圈
- Android上傳圖片之呼叫系統拍照和從相簿選擇圖片Android
- Android將圖片儲存到相簿並及時看到Android
- Android儲存多張圖片到本地Android
- 圖片儲存-從七牛到 GithubGithub
- android開發筆記之內建圖片到相簿Android筆記
- 儲存圖片
- Android中呼叫攝像頭拍照儲存,並在相簿中選擇圖片顯示Android
- Android生成圖片並放入相簿Android
- Activiti 儲存圖片
- Android 呼叫相簿 拍照 實現系統控制元件縮放 切割圖片Android控制元件
- Android本地圖片上傳(拍照+相簿)Android地圖
- 長按UIWebView上的圖片儲存到相簿UIWebView
- 直播商城系統原始碼,點選按鈕 儲存頁面為圖片到本地原始碼
- Android——儲存圖片到外部儲存並進行原生分享Android
- 適配Android4.4~Android11,呼叫系統相機,系統相簿,系統圖片裁剪,轉換檔案(對圖片進行上傳等操作)Android
- java+pgsql實現儲存圖片到資料庫,以及讀取資料庫儲存的圖片JavaSQL資料庫
- 三種方法,重新整理 Android 的 MediaStore!讓你儲存的圖片立即出現在相簿裡!AndroidAST
- 生成二維碼,並且儲存,指定位置的view成圖片,並且儲存到本地相簿View
- 前端js儲存頁面為圖片下載到本地前端JS
- ASP儲存遠端圖片檔案到原生程式碼
- asp.net儲存圖片ASP.NET
- Matlab GUI儲存圖片MatlabGUI
- win10系統如何擷取視訊片段儲存為圖片Win10
- win10系統如何擷取影片片段儲存為圖片Win10
- win10系統中360瀏覽器如何快捷儲存圖片Win10瀏覽器
- 將網站儲存成圖片網站
- Android 儲存系統之原始碼篇Android原始碼
- Android 儲存系統之架構篇Android架構
- 儲存系統
- C# 截圖並儲存為圖片C#
- 【轉】mysql儲存圖片技術決定:儲存二進位制檔案還是隻儲存圖片相對路徑,圖片放在硬碟上面?MySql硬碟