【发布时间】:2014-01-20 10:01:43
【问题描述】:
在“观察”了 ContentObserver 之后,我注意到 API 16 之前的 OnChange 没有传递任何参数,所以我决定在我的项目的每一行中实现它(项目正在使用内置的 DownloadManager 下载 url)
我为每一行创建一个新的 ContentObserver :
Uri downloadsContentUri = Uri.parse("content://downloads/my_downloads/downloads/" + appDownloadId);
DownloadsObserver downloadsObserver = new DownloadsObserver(downloadId, new Handler());
getContentResolver().registerContentObserver(downloadsContentUri, true, downloadsObserver);
你可以看到 Uri 总是通过行 id 改变(在我检查过的 DownloadManager DB 上它是相同的),并且在这段代码之后,我将所有观察者存储在一个列表中, 奇怪的是 OnChange 只被调用一次,并且只在第一次下载时被调用,即使在下载完成后也不会再次调用..
我在这里做错了什么? 如何完成对 DownloadManager DB 上每一行的观察? (我是系统应用)
谢谢。
【问题讨论】:
-
您是否考虑将一个 ContentObserver 注册到 uri 并在 onChange 方法中检查导致更改的最后一条记录?
-
谷歌搜索后如何检查导致更改的最后一条记录?
-
您是否在 _id 上使用自动增量?
-
id是DownloadManager的Downloads.db给我的id,我打开了这个表(根设备)并确认这是我正在寻找的下载的id...
-
表中是否有可以识别最后一条记录的字段?一些时间戳?
标签: android contentobserver android-download-manager