从另一个应用程序的内容提供商访问数据

时间:2018-09-23 08:20:37

标签: android xamarin android-contentprovider

我有一个用Xamarin编写并移植到Android的测试应用程序。其中包含清单文件中包含以下内容的导出的内容提供程序。

<provider android:name="md5c7302988dec23c3faede6ee623ad91b8.AppStateProvider" android:exported="true" android:authorities="com.example.myapp.AppStateProvider"/>

但是我不确定如何从用Android Studio编写的独立的独立Android应用程序查询和打印数据。我发现了各种教程和内容,但是其中许多使用较旧的游标方法(而不是Content Resolver)已经过时了,因此会引发很多错误并导致应用程序崩溃。

请遵循什么正确的方法来在应用之间获取此数据。

编辑:这就是我使用ContentResolver的方式

Uri yourURI = Uri.parse("content://com.example.myapp.AppStateProvider/AppState");
ContentProviderClient yourCR = getContentResolver().acquireContentProviderClient(yourURI);

    try {
        Cursor yourCursor = yourCR.query(yourURI, null, null, null, null);
        Log.i("stuff", String.valueOf(yourCursor));
    } catch (RemoteException e) {
        e.printStackTrace();
    }

但这会崩溃:

Unable to start activity ComponentInfo{com.cpreader/com.cpreader.MainActivity}: java.lang.SecurityException: Unknown packagename

删除CP代码后,应用程序运行正常(只是一个基本的空Hello World活动)

编辑: 我修改了CP名称以使用名称而不是授权,并按预期得到了错误 Failed to find provider info for md5c7302988dec23c3faede6ee623ad91b8.AppStateProvider

这意味着我具有正确的授权机构名称,并且可以找到该提供程序,因此带有软件包名称的其他内容使该程序崩溃了

EDIT2:

以下代码也因相同的错误而崩溃: Caused by: java.lang.SecurityException: Unknown packagename

ContentResolver cr = getContentResolver();
    Cursor cursor = cr.query(uri, null, null, null, null);
    if (cursor != null) {
        cursor.moveToFirst();
        String filePath = cursor.getString(cursor.getColumnIndex("Name"));
        cursor.close();

        Log.i("stuff", filePath);

0 个答案:

没有答案