gpt4 book ai didi

android, MediaScanner vs FileObserver 用于监控创建的媒体文件

转载 作者:太空狗 更新时间:2023-10-29 14:19:22 26 4
gpt4 key购买 nike

什么是监视正在创建的媒体文件的几个路径(设备的内部和外部存储器)的最佳选择(MediaScanner/FileObserver)。

每当在受监视的文件夹中创建媒体文件时,我都需要获得一个事件。

-感谢和问候,文殊

最佳答案

首先,FileOberver 是一种内存 killer 方法。考虑大量文件。 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;
}

在服务(一直运行)中执行此操作可能是个好主意!您还需要在 onDestroy()

中注销

警告:这只会告诉您 MediaStore 何时更改,不会告诉您有关添加/删除的任何具体信息。为此,您可能需要查询 MediaStore 以检测您之前的数据库或其他内容的任何更改。

关于android, MediaScanner vs FileObserver 用于监控创建的媒体文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18268747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com