从不同的应用访问自定义内容提供商

tgA*_*oid 16 android android-contentprovider

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

我在第一个应用程序的清单文件中声明了我的内容提供程序

<provider android:name="com.example.CustomCP"      android:authorities="com.example.customcp"/>
Run Code Online (Sandbox Code Playgroud)

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

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);
}
}
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*teH 15

是的,可以从其他应用访问自定义内容提供商.使用您的术语,我们将调用内容提供商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块中,或者包含"throws RemoteException",因为提供程序不在App A中.

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

    <provider
        android:name="your.package.contentprovider.YourProvider"
        android:authorities="YourAuthority"
        android:readPermission="android.permission.permRead"
        android:exported="true" >
     </provider>
    
    Run Code Online (Sandbox Code Playgroud)


Mid*_*ido 0

在清单文件中,确保您的

“Android 提供商..>”
就在你的里面

“应用程序../应用程序>”

希望有帮助