Android ContentObserver每行实现

Android ContentObserver每行实现,android,contentobserver,android-download-manager,Android,Contentobserver,Android Download Manager,在“观察”了ContentObserver之后,我注意到API 16之前的OnChange没有传递任何参数,所以我决定将其实现到我项目的每一行(项目正在使用内置的DownloadManager下载url) 对于每一行,我将创建一个新的ContentObserver: Uri downloadsContentUri = Uri.parse("content://downloads/my_downloads/downloads/" + appDownloadId); Download

在“观察”了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数据库上也是如此),在这段代码之后,我将所有观察者存储在一个列表中, 奇怪的是OnChange只被调用了一次,而且只在第一次下载时被调用,而且即使在下载完成后也从未被调用过

我做错了什么? 如何完成对DownloadManager数据库中每一行的观察?(我是一个系统应用程序)

谢谢。

我知道了

这是我针对每一行的ContentObserver的解决方案,它可以应用于API 15(15没有像API 16那样的带有URI参数的OnChange)。 当然,每行都需要一个新的ContentObserver

错误就在这一行

 Uri downloadsContentUri = Uri.parse("content://downloads/my_downloads/downloads/" + appDownloadId);
它应该没有“/downloads/”,如下所示:

Uri downloadsContentUri = Uri.parse("content://downloads/my_downloads/" + appDownloadId);
这是我的观察者:

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

}
}

是否考虑将一个内容观察者注册到URI中,并在Onchange方法中检查导致更改的最后一个记录?在GoGooLink之后,如何检查引起更改的最后记录?是否在AYID上使用AutoDelphi?ID是DeLabMealSoad的DealSudi.DB给我的ID,我打开了该表。(根设备)并确认这是我正在查找的下载id…表中是否有任何字段可以识别最后一条记录?一些时间戳?