Android 新增一张图片 加入相册
当我要把一张图片加入到相册时, 执行如下的 代码, 发个广播就好了
getContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
但是发现在有些手机上 比较慢, 不是很实时
如果 做相册之类的 需求的画, 新增一张图片然后在立马刷新数据的画, 可能 没有刚刚新增的数据
那么还可以用如下方法:
MediaScannerConnection.scanFile(getContext().getApplicationContext(), new String[]{mCurrentSavePhotoPath}, null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
LogUtil.e(TAG, "onScanCompleted path = " + path);
}
});
测试结果 确实是比发广播快一些:
对了说道实时扫描 Android 手机图片数据:
有如下两种方法:
1) 通过 activity 的 activity.getLoaderManager().initLoader 方法
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};
activity.getLoaderManager().initLoader(0, null, new LoaderManager.LoaderCallbacks<Cursor>() {
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(getContext(), MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, "", null, MediaStore.Images.Media.DATE_MODIFIED + " DESC ");
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cur) {
handleImageData(cur);
getMvpView().loadImgOver(mAlbumModels);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
});
2) 使用ContentResolver 查询
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
ContentResolver cr = getContext().getContentResolver();
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};
Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, "", null, MediaStore.Images.Media.DATE_MODIFIED + " DESC ");
handleImageData(cur);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
getMvpView().loadImgOver(mAlbumModels);
}
}.execute();
第一种方法的好处是, 当如果有 图片数据改动时, 它能够自动重新查询一遍数据
第二种就是手动查询, 如果有数据变动 也不知道
还没有评论,来说两句吧...