Android 新增一张图片 加入相册
2015-12-22 00:18
441 查看
当我要把一张图片加入到相册时, 执行如下的 代码, 发个广播就好了
但是发现在有些手机上 比较慢, 不是很实时
如果 做相册之类的 需求的画, 新增一张图片然后在立马刷新数据的画, 可能 没有刚刚新增的数据
那么还可以用如下方法:
测试结果 确实是比发广播快一些:
对了说道实时扫描 Android 手机图片数据:
有如下两种方法:
1) 通过 activity 的 activity.getLoaderManager().initLoader 方法
2) 使用ContentResolver 查询
第一种方法的好处是, 当如果有 图片数据改动时, 它能够自动重新查询一遍数据
第二种就是手动查询, 如果有数据变动 也不知道
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();
第一种方法的好处是, 当如果有 图片数据改动时, 它能够自动重新查询一遍数据
第二种就是手动查询, 如果有数据变动 也不知道
相关文章推荐
- Android ViewGroup中事件触发和传递机制
- Android ListView类+ArrayAdapter类简单演示
- android,内容延伸到状态栏
- Android之实例界面设计
- Android之我的第一个程序
- Android之SQLite存取DATETIME类型
- Android 近百个项目的源代码
- Android之调用本地摄像头
- Android 中的BroadCastReceiver
- Android Service和Activity基于串口蓝牙模块的双向通信
- android 的NDK在Windwos环境搭建(一)
- android 公开静态内部类BroadcastReceiver
- Android之获取IP
- android 的Activity和Service之间的通信
- Android之控制视图
- android 的NDK在Windwos环境搭建(二)
- Android之handler的使用
- Android之在GEC210板上点灯。
- Android之Activity的生命周期
- android 在service中如何向activity传递数据