android - 从不同的应用程序访问自定义内容提供者

标签 android android-contentprovider

您好,我创建了一个 Android 应用程序,它使用名为 CustomCP 的自定义内容提供程序, 它实现了所有方法,并且在管理应用程序内的数据时一切正常, 但是当我尝试从另一个应用程序访问它时,我不断收到错误消息“找不到 com.example.customcp 的提供商信息。

我已在第一个应用程序的 list 文件中将我的内容提供者声明为

<provider android:name="com.example.CustomCP"      android:authorities="com.example.customcp"/>

我尝试在第二个应用程序启动 Activity 中调用提供者

public class app2 extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Uri kUri = Uri.parse("content://com.example.customcp/key");
        Cursor c = managedQuery(kUri, null, null, null, null);
}
}

所以问题很简单,是否可以从多个应用程序访问自定义内容提供程序?

最佳答案

是的,可以从另一个应用程序访问自定义内容提供程序。使用您的术语,我们将调用内容提供者 CustomCP 和另一个应用程序 AppA。 (AppA 是想要访问提供者的那个)。这种方法被证明是有效的:

  1. 使用 ContentProviderClient 从 AppA 中指定所需的内容提供者 (CustomCP):

    Uri yourURI = Uri.parse("content://com.example.customcp/YourDatabase"); ContentProviderClient yourCR = getContentResolver().acquireContentProviderClient(yourURI);

  2. 像往常一样从 App A 访问内容提供者。例如:

    yourCursor = yourCR.query(yourURI, null, null, null, null);

    注意:您必须将代码包含在 try/catch block 中或包含“throws RemoteException”,因为提供程序不在 App A 中。

  3. CustomCP 的 list 必须指定提供者,包括允许的权限(例如读取和/或写入),并且必须导出提供者。这是一个例子:

    <provider
        android:name="your.package.contentprovider.YourProvider"
        android:authorities="YourAuthority"
        android:readPermission="android.permission.permRead"
        android:exported="true" >
     </provider>
    

关于android - 从不同的应用程序访问自定义内容提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5714224/

相关文章:

android - 在推送通知android Phonegap中显示多行

android - 使用 invalidateOptionsMenu() 打开/关闭 NavDrawer 会导致对 SearchView 和 onQueryTextChange 的 onRestore 调用

android - 无法在 android 中为微调器设置 OnItemClickListener

android - java.lang.SecurityException : Permission Denial: reading 错误

安卓自由 ScrollView

android - 如何使用 insert-koin 在内容提供者中注入(inject)数据存储库实例

android - 如何从 native 联系人/内容解析器获取联系人的 facebook id 或 url?

android - 有什么方法可以检测视频是否可以在设备上播放?

java - 如何获取不同时区的年、月、日?

java - 从 Snapchat 分享到我的应用程序