为什么我的光标的通知URI被取消了?

时间:2015-08-05 20:40:42

标签: android

我们的DocumentsProvider无法立即为查询提供服务,因此它返回一个带有EXTRA_LOADING标志和通知URI(setNotificationUri)的游标。这是provider source。我认为它的编码与API docs建议完全相同。

来电者是通过内容解析器(caller source)进行通信的独立应用。它检测到该标志,但是接收到URI的空值(getNotificationUri)。为什么呢?

对呼叫者端的URI进行硬编码可以修复它,但它不会跨越提供者。什么是便携式修复?

1 个答案:

答案 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, ... );
}

这应该适用于各个提供商。