一、保存圖片(集)到本地
1.保存單張圖片到本地,這里使用的是ImageLoader加載的圖片,通過ImageLoader.getInstance().loadImageSync(path)返回圖片的位圖。
// 保存圖片
private Runnable saveFileRunnable = new Runnable() {
@Override
public void run() {
try {
//注釋掉的代碼是之前用的比較繁瑣的方法來保存圖片到本地
// Drawable drawable = SaveImageUtil.loadImageFromNetwork(
// listMImage.get(indexImage).getImgPath());
// if (drawable == null) {
// mSaveMessage = getString(
// R.string.language_pictureSavedFailed);
// } else {
// BitmapDrawable bd = (BitmapDrawable) drawable;
// mBitmap = bd.getBitmap();
// }
//loadImage是異步加載;方法loadImageSync是同步加載,待圖片資源加載完畢,直接返回位圖(bitmap)資源對象
mBitmap = ImageLoader.getInstance().loadImageSync(listMImage.get(indexImage).getImgPath());
SaveImageUtil.saveFile(mBitmap, listMImage.get(indexImage).getImgPath(), getActivity());
mSaveMessage = getString(R.string.language_pictureSavedSuccessfully);
} catch (Exception e) {
mSaveMessage = getString(R.string.language_pictureSavedFailed);
e.printStackTrace();
}
messageHandler.sendMessage(messageHandler.obtainMessage());
}
};
private Handler messageHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
showToast(mSaveMessage);
}
};
2.保存圖片集到本地,也就是添加了一個循環,循環保存集合中的圖片
//保存所有的圖片
private Runnable saveAllFileRunnable = new Runnable() {
@Override
public void run() {
try {
downloadNum = 0;
for (int i = 0; i < listMImage.size(); i++) {
if (listMImage.get(i).getMark() == 1) {//只保存已經上傳了的所有圖片
downloadNum++;
mBitmap = ImageLoader.getInstance().loadImageSync(listMImage.get(i).getImgPath());
SaveImageUtil.saveFile(mBitmap, listMImage.get(i).getImgPath(), getActivity());
}
}
if (downloadNum >= getServerImage.size()) {
mSaveMessage = getString(R.string.language_pictureSavedSuccessfully);
dismissProgressDialog();//隱藏提示正在保存圖片的Dialog
}
} catch (Exception e) {
dismissProgressDialog();
e.printStackTrace();
}
if (isShareImage == false)
messageHandler.sendMessage(messageHandler.obtainMessage());
}
};
private Handler messageHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
showToast(mSaveMessage);
}
};
3.保存圖片SaveImageUtil.saveFile()方法:
//下載圖片保存到系統圖庫
private static final String pathImage = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/";
/**
* 把圖片網址轉換為Drawable
*/
public static Drawable loadImageFromNetwork(String imageUrl) {
Drawable drawable = null;
try {
// 可以在這里通過文件名來判斷,是否本地有此圖片
drawable = Drawable.createFromStream(new URL(imageUrl).openStream(), "image.png");
} catch (Exception e) {
Log.d("test", e.getMessage());
}
// if (drawable == null) {
// Log.d("test", "null drawable");
// } else {
// Log.d("test", "not null drawable");
// }
return drawable;
}
@SuppressLint("DefaultLocale")
public static void saveFile(Bitmap bm, String url, Context context) throws Exception {
// 判斷sd卡是否存在
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// 判斷文件夾是否存在
File dirFile = new File(path);
if (!dirFile.exists()) {
dirFile.mkdirs();//創建此抽象路徑指定的目錄,包括所有必須但不存在的父目錄。(及可以創建多級目錄,無論是否存在父目錄)
}
String fileName = url.substring(url.lastIndexOf("/") + 1, url.length()).toLowerCase();
File file = new File(path + fileName);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
bm.compress(Bitmap.CompressFormat.PNG, 100, bos);
bos.flush();
bos.close();
// //把文件插入到系統圖庫
// MediaStore.Images.Media.insertImage(context.getContentResolver(), bm, fileName, null);
// 通知圖庫更新
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file)));
} else {
Toast.makeText(context, context.getString(R.string.language_notSDCard), Toast.LENGTH_SHORT).show();
}
}
二、保存視頻到本地
1.需要導入文件下載的包
//filedownloader---Android 文件下載引擎,穩定、高效、靈活、簡單易用 implementation 'com.liulishuo.filedownloader:library:1.7.3'
2.下載視頻的代碼
//下載視頻到本地
private void downLoadVideo(String videoUrl) {
FileDownloader.setup(getActivity());
final String videoName = new File(videoUrl).getName();//得到圖片名稱
FileDownloader.getImpl().create(videoUrl).setPath(downloadVideoPath + videoName).
setForceReDownload(false)//強制重新下載,將會忽略檢測文件是否健在
.setListener(new FileDownloadListener() {
@Override
protected void pending(BaseDownloadTask task, int soFarBytes, int totalBytes) {
//等待,已經進入下載隊列
try {
showWaitProgressDialog(getActivity(), 1, getString(R.string.language_downloading));
} catch (Exception e) {
}
}
@Override
protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) {
//下載進度
}
@Override
protected void completed(BaseDownloadTask task) {
//完成整個下載過程
try {
dismissProgressDialog();
showToast(getString(R.string.language_saveSuccessfully));//退出界面時,下載完報錯
// 通知圖庫更新
getActivity().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + downloadVideoPath + videoName)));
} catch (Exception e) {
}
}
@Override
protected void paused(BaseDownloadTask task, int soFarBytes, int totalBytes) {
//暫停下載
}
@Override
protected void error(BaseDownloadTask task, Throwable e) {
//下載出現錯誤
try {
dismissProgressDialog();
showToast(getString(R.string.language_videosDownloadFail));
} catch (Exception ex) {
}
}
@Override
protected void warn(BaseDownloadTask task) {
//在下載隊列中(正在等待/正在下載)已經存在相同下載連接與相同存儲路徑的任務
}
}).start();
}
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。