Tha*_*vam 6 android android-contentresolver android-gallery android-mediascanner fileobserver
我需要收听来自任何来源的新图像,例如下载图像,捕获新图像,其他应用程序下载图像等等.是否有任何监听器会在新图片添加到图库时触发事件?我一直在寻找两天.我无法得到任何可靠的东西.
我读到了 FileObserver,这会有帮助吗?
Ami*_*aha 10
新照片到达画廊
意味着它已被添加到MediaStore.
首先,FileOberver是一种记忆杀手的方法.考虑大量文件.相反,ContentObserver似乎是一种更好的方法.
getContentResolver().registerContentObserver(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, true,
new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
Log.d("your_tag","Internal Media has been changed");
super.onChange(selfChange);
Long timestamp = readLastDateFromMediaStore(context, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
// comapare with your stored last value and do what you need to do
}
}
);
getContentResolver().registerContentObserver(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true,
new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
Log.d("your_tag","External Media has been changed");
super.onChange(selfChange);
Long timestamp = readLastDateFromMediaStore(context, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
// comapare with your stored last value and do what you need to do
}
}
);
private Long readLastDateFromMediaStore(Context context, Uri uri) {
Cursor cursor = context.getContentResolver().query(uri, null, null, null, "date_added DESC");
PhotoHolder media = null;
Long dateAdded =-1;
if (cursor.moveToNext()) {
Long dateAdded = cursor.getLong(cursor.getColumnIndexOrThrow(MediaColumns.DATE_ADDED));
}
cursor.close();
return dateAdded;
}
Run Code Online (Sandbox Code Playgroud)
在服务中执行此操作可能是一个好主意(永远运行)!您还需要取消注册onDestroy()
警告:这只会告诉您MediaStore何时更改,它没有任何关于添加/删除的具体信息.为此,您可能必须查询MediaStore以检测先前数据库或其他内容的任何更改.
| 归档时间: |
|
| 查看次数: |
2361 次 |
| 最近记录: |