我已阅读Android ContentResolver
上的文档我也搜索了一个合适的例子无济于事。
根据文档,有一种方法call
可用作在标准内容提供程序方法不足时访问自定义提供程序方法的方法:
final Bundle call(Uri uri, String method, String arg, Bundle extras)
Call a provider-defined method.
所以在我的代码中执行:
getContentResolver().call(uri, method, arg, extras);
但始终会返回 null
捆绑。实际上,提供程序中的方法永远不会被调用。
进一步的研究指出合同的(感知的)差异,其中 RESOLVER 具有 uri论证,没有等效的 PROVIDER 参数:< / p>
Bundle call(String method, String arg, Bundle extras)
Call a provider-defined method.
我显然不理解某事。有人能指出我正确的方向吗?
答案 0 :(得分:6)
进一步的研究指出合同的差异,其中RESOLVER的uri参数没有等效的PROVIDER参数
这就是他们写作的方式。 Uri
只是标识ContentProvider
- ContentProvider
知道它是谁,因此不需要Uri
。
提供者方法不允许@Override注释
是的,正如您在this sample ContentProvider
中看到的那样:
@Override
public Bundle call(String method, String arg, Bundle extras) {
if (SET_KEY_METHOD.equals(method) && arg != null) {
key=arg;
}
return(null);
}
但是,您的构建目标(例如,在Eclipse,Project&gt; Properties&gt; Android中)必须设置为API级别11或更高。
来自the client的相应call()
如下所示:
getContentResolver().call(Provider.Constants.CONTENT_URI,
Provider.SET_KEY_METHOD, "sekrit", null);
是。我在提供程序中有一个声明为'public'的方法,该方法被传递给contentresolver参数'method'。
这不是它的工作原理。 call()
ContentResolver
上的call()
ContentProvider
{{1}}。{/ 1}
答案 1 :(得分:2)
要回答您的第二个问题,我的猜测是ContentProvider
call()
版Uri
版本不需要ContentResolver
参数,因为与ContentProvider
不同,它不会需要找到{{1}};它自己调用方法。