把bitmap以png保存到手機本地,然後在相冊中查看沒有顯示,但是在文件管理中卻可以看到,4.4之後android提供了專門的API通知系統刷新制定路徑,但是這個路徑必須是Environment.getExternalStorageDirectory().getAbsolutePath() 開頭,在保存成功後使用ACTION_MEDIA_SCANNER_SCAN_FILE這個廣播更新卻發現相冊中並沒有,代碼:
class SaveTask extends AsyncTask<View, Void, Boolean> {
private final String TAG = getClass().getSimpleName();
WeakReference<ResultShareActivity> activity;
private String path;
private String dir;
public SaveTask(ResultShareActivity activity) {
this.activity = new WeakReference<>(activity);
}
@Override
protected Boolean doInBackground(View... views) {
Bitmap bmp = ImageCacheUtil.createBitmapFromDrawingCache(views[0]);
// 保存文件
dir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + activity.get().getPackageName();
Logger.debug(TAG, "doInBackground: dir = " + dir);
path = dir + "/" +
activity.get().analysisBean.getPaperId() + System.currentTimeMillis() + ".png";
boolean b = FileUtil.saveBitmapAsPng(bmp, path);
return b;
}
@Override
protected void onPostExecute(Boolean b) {
super.onPostExecute(b);
if (b) {
ToastUtils.showToast(activity.get(), "保存成功");
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.parse(path);
intent.setData(uri);
activity.get().sendBroadcast(intent);
} else {
ToastUtils.showToast(activity.get(), "保存失敗");
}
}
}
然後上網搜了一下,看到很多人在傳遞Uri的時候是用的Uri.fromFile,然後就試了一下,發現成功了,具體原因暫沒有研究,只是做一個記錄,方便遇到同樣問題的童鞋快速定位問題,以下是修改過的代碼:
class SaveTask extends AsyncTask<View, Void, Boolean> {
private final String TAG = getClass().getSimpleName();
WeakReference<ResultShareActivity> activity;
private String path;
private String dir;
public SaveTask(ResultShareActivity activity) {
this.activity = new WeakReference<>(activity);
}
@Override
protected Boolean doInBackground(View... views) {
Bitmap bmp = ImageCacheUtil.createBitmapFromDrawingCache(views[0]);
// 保存文件
dir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + activity.get().getPackageName();
Logger.debug(TAG, "doInBackground: dir = " + dir);
path = dir + "/" +
activity.get().analysisBean.getPaperId() + System.currentTimeMillis() + ".png";
boolean b = FileUtil.saveBitmapAsPng(bmp, path);
return b;
}
@Override
protected void onPostExecute(Boolean b) {
super.onPostExecute(b);
if (b) {
ToastUtils.showToast(activity.get(), "保存成功");
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(new File(path));
intent.setData(uri);
activity.get().sendBroadcast(intent);
} else {
ToastUtils.showToast(activity.get(), "保存失敗");
}
}
}