我们的DocumentsProvider无法立即为查询提供服务,因此它返回一个带有EXTRA_LOADING标志和通知URI(setNotificationUri)的游标。这是provider source。我认为它的编码与API docs建议完全相同。
来电者是通过内容解析器(caller source)进行通信的独立应用。它检测到该标志,但是接收到URI的空值(getNotificationUri)。为什么呢?
对呼叫者端的URI进行硬编码可以修复它,但它不会跨越提供者。什么是便携式修复?
答案 0 :(得分:0)
我猜这是一个Android错误。我开了一个bug report。同时我通过使用提供程序的最顶层URI作为默认通知URI来解决它。例如:
Uri qU = DocumentsContract.buildChildDocumentsUriUsingTree( tU, ... );
Cursor c = contentResolver.query( qU, ... );
boolean xL = c.getExtras().getBoolean( DocumentsContract.EXTRA_LOADING );
if( xL ) // then also expect notification URI
{
Uri nU = c.getNotificationUri();
boolean notifyForDescendents;
if( nU == null ) // <--- possible Android bug
{
// default to topmost ancestor of tU
Uri.Builder b = new Uri.Builder();
nU = b.scheme(tU.getScheme()).authority(tU.getAuthority()).build();
notifyForDescendents = true;
}
else notifyForDescendents = false;
contentResolver.registerContentObserver( nU, notifyForDescendents, ... );
}
这应该适用于各个提供商。