在对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上每一行的观察?(我是一个系统应用程序)
谢谢。
发布于 2014-01-06 08:23:04
这样啊,原来是这么回事!
这是我针对每一行ContentObserver的解决方案,它可以应用于API 15 (15没有像API 16那样具有URI param的OnChange )。当然,每一行都需要一个新的ContentObserver。
错误就在这条线上
Uri downloadsContentUri = Uri.parse("content://downloads/my_downloads/downloads/" + appDownloadId);它应该没有“/ like /”,如下所示:
Uri downloadsContentUri = Uri.parse("content://downloads/my_downloads/" + appDownloadId);这是我的ContentObserver:
public class DownloadsObserver extends ContentObserver
{
private long mAppDownloadId = 0;
public DownloadsObserver(Handler handler)
{
super(handler);
}
public DownloadsObserver(long appDownloadId, Handler handler)
{
super(handler);
mAppDownloadId = appDownloadId;
}
@Override
public void onChange(boolean selfChange)
{
super.onChange(selfChange);
// Do some work on this row with the id
}
}https://stackoverflow.com/questions/20891705
复制相似问题