Android ContentProvider Unknown authority 问题
1 | java.lang.IllegalArgumentException: Unknown authority com.example.myprovider |
从字面意思理解是没有找到特定的 ContentProvider。
一般定义 ContentProvider 如下:
1 | <provider |
当调用如下代码时出错:
1 | private fun callMethodInstaller(context: Context, extras: Bundle?): Bundle? { |
源码分析,以 Android 11.0(R/api-30) 为例:
1 |
|
- 如果获取不到 provider 就会抛出异常;
- 调用 provider 的方法,返回结果;
- 最后释放 provider;
acquireProvider 会调用到 ContextImpl.ApplicationContentResolver#acquireProvider() 方法:
1 | protected IContentProvider acquireProvider(Context context, String auth) { |
再调用 ActivityThread#acquireProvider() 方法:
1 | public final IContentProvider acquireProvider( |
- 查找 provider 是否存在,如果已存在直接返回;
- 如果不存在,则通过 AMS 查找符合条件的 provider;
- AMS 没找到返回 null;否则安装 provider;