您的位置:首页 > 移动开发 > Android开发

Android 新增一张图片 加入相册

2015-12-22 00:18 441 查看
当我要把一张图片加入到相册时, 执行如下的 代码, 发个广播就好了

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();


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

第二种就是手动查询, 如果有数据变动 也不知道
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: