Android 發送系統廣播ACTION_MEDIA_SCANNER_SCAN_FILE更新相冊無效

把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(), "保存失敗");
            }
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章