Android 新增一张图片 加入相册

忘是亡心i 2022-08-18 13:16 199阅读 0赞

当我要把一张图片加入到相册时, 执行如下的 代码, 发个广播就好了

  1. getContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));

但是发现在有些手机上 比较慢, 不是很实时

如果 做相册之类的 需求的画, 新增一张图片然后在立马刷新数据的画, 可能 没有刚刚新增的数据

那么还可以用如下方法:

  1. MediaScannerConnection.scanFile(getContext().getApplicationContext(), new String[]{mCurrentSavePhotoPath}, null, new MediaScannerConnection.OnScanCompletedListener() {
  2. @Override
  3. public void onScanCompleted(String path, Uri uri) {
  4. LogUtil.e(TAG, "onScanCompleted path = " + path);
  5. }
  6. });

测试结果 确实是比发广播快一些:

对了说道实时扫描 Android 手机图片数据:

有如下两种方法:

1) 通过 activity 的 activity.getLoaderManager().initLoader 方法

  1. final String[] columns = {MediaStore.Images.Media.BUCKET_ID, MediaStore.Images.Media._ID, MediaStore.Images.Media.BUCKET_DISPLAY_NAME, MediaStore.Images.Media.DATA, MediaStore.Images.Media.WIDTH, MediaStore.Images.Media.HEIGHT};
  2. activity.getLoaderManager().initLoader(0, null, new LoaderManager.LoaderCallbacks<Cursor>() {
  3. @Override
  4. public Loader<Cursor> onCreateLoader(int id, Bundle args) {
  5. return new CursorLoader(getContext(), MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, "", null, MediaStore.Images.Media.DATE_MODIFIED + " DESC ");
  6. }
  7. @Override
  8. public void onLoadFinished(Loader<Cursor> loader, Cursor cur) {
  9. handleImageData(cur);
  10. getMvpView().loadImgOver(mAlbumModels);
  11. }
  12. @Override
  13. public void onLoaderReset(Loader<Cursor> loader) {
  14. }
  15. });

2) 使用ContentResolver 查询

  1. new AsyncTask<Void, Void, Void>() {
  2. @Override
  3. protected Void doInBackground(Void... params) {
  4. ContentResolver cr = getContext().getContentResolver();
  5. final String[] columns = {MediaStore.Images.Media.BUCKET_ID, MediaStore.Images.Media._ID, MediaStore.Images.Media.BUCKET_DISPLAY_NAME, MediaStore.Images.Media.DATA, MediaStore.Images.Media.WIDTH, MediaStore.Images.Media.HEIGHT};
  6. Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, "", null, MediaStore.Images.Media.DATE_MODIFIED + " DESC ");
  7. handleImageData(cur);
  8. return null;
  9. }
  10. @Override
  11. protected void onPostExecute(Void aVoid) {
  12. super.onPostExecute(aVoid);
  13. getMvpView().loadImgOver(mAlbumModels);
  14. }
  15. }.execute();

第一种方法的好处是, 当如果有 图片数据改动时, 它能够自动重新查询一遍数据

第二种就是手动查询, 如果有数据变动 也不知道

发表评论

表情:
评论列表 (有 0 条评论,199人围观)

还没有评论,来说两句吧...

相关阅读