Android - 无法使用内容提供商

时间:2017-07-26 12:55:53

标签: android android-manifest android-contentprovider

我正在寻找关于这次失败的许多其他答案,而且没有人解决我的问题。

我有两个应用程序,app1是使用Content Provider实现的,还有一个名为students的数据库。这个数据库通常在app1内访问。 但是,当我从app2获取数据库时,我遇到了这个错误:

  

无法找到提供商信息   com.example.a436236692.myapplication.StudentsProvider

从两个应用程序中获取学生数据库的代码都是相同的:

Uri myURI = Uri.parse("content://com.example.a436236692.myapplication.StudentsProvider/students");
ContentProviderClient myCR = getContentResolver().acquireContentProviderClient(myURI);
try {
    Cursor c = myCR.query(myURI, null, null, null, "name");
    if (c.moveToFirst()) {
        do{
            Toast.makeText(this,
                  c.getString(c.getColumnIndex(Constantes._ID)) +
                  ", " +  c.getString(c.getColumnIndex( Constantes.NAME)) +
                  ", " + c.getString(c.getColumnIndex( Constantes.GRADE)),
                  Toast.LENGTH_SHORT).show();
        } while (c.moveToNext());
    }
} catch (RemoteException e) {
    e.printStackTrace();
}

推出应用2,myCR附带null。他们崩溃申请。

通过搜索此问题,我发现了许多需要从Content Provider包授予访问权限的信息。以下是我的清单:

清单表单app1:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.a436236692.myapplication" >

<uses-permission android:name="android.permission.READ_USER_DICTIONARY"/>
<uses-permission android:name="android.permission.WRITE_USER_DICTIONARY"/>
<uses-permission android:name="android.permission.READ_DATABASE"/>
<uses-permission android:name="android.permission.WRITE_DATABASE"/>
<uses-permission android:name="com.example.a436236692.myapplication.StudentsProvider.READ_DATABASE"/>
<uses-permission android:name="com.example.a436236692.myapplication.StudentsProvider.WRITE_DATABASE"/>
<permission android:name="com.example.a436236692.myapplication.StudentsProvider" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:permission="com.example.a436236692.myapplication.StudentsProvider">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <provider android:name="com.example.a436236692.myapplication.StudentsProvider"
            android:authorities="com.example.a436236692.myapplication.StudentsProvider"
            android:enabled="true"
            android:multiprocess="true"
            android:readPermission="com.example.a436236692.myapplication.StudentsProvider.READ_DATABASE"
            android:writePermission="com.example.a436236692.myapplication.StudentsProvider.WRITE_DATABASE"
            android:exported="true" />
    </application>
</manifest>

清单表单app2:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.a436236692.testes">

<uses-permission android:name="com.example.a436236692.myapplication.StudentsProvider.READ_DATABASE"/>
<uses-permission android:name="com.example.a436236692.myapplication.StudentsProvider.WRITE_DATABASE"/>
<uses-permission android:name="android.permission.READ_USER_DICTIONARY"/>
<uses-permission android:name="android.permission.WRITE_USER_DICTIONARY"/>
<uses-permission android:name="android.permission.READ_DATABASE"/>
<uses-permission android:name="android.permission.WRITE_DATABASE"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:readPermission="com.example.a436236692.myapplication.StudentsProvider.READ_DATABASE"
    android:writePermission="com.example.a436236692.myapplication.StudentsProvider.WRITE_DATABASE"
    android:theme="@style/AppTheme">
    <activity android:name="com.example.a436236692.testes.MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.example.a436236692.testes.ContentProviderExampleActivity" />
</application>

</manifest>

即使拥有权限,在app1内部,读取和写入以及我在清单中包含的其他内容,它们也不会影响结果。

由于

0 个答案:

没有答案