问题
Hello i have created an android app that uses a custom content provider named CustomCP, it implements all methods and everything works fine while managing data inside the app, but when i try to access it from another app i keep getting an error of " Failed to find provider info for com.example.customcp.
I have declared my content provider in the manifest file of the first app as
<provider android:name="com.example.CustomCP" android:authorities="com.example.customcp"/>
I try to call the provider in the second's application start up 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);
}
}
So the question is simple , is it possible to access a custom content provider from multiple applications?
回答1:
Yes, it's possible to access a custom content provider from another app. Using your terminology we'll call the content provider CustomCP and the other app AppA. (AppA is the one that wants to access to the provider). This approach is proven to work:
Specify the desired content provider (CustomCP) from within AppA by using a ContentProviderClient:
Uri yourURI = Uri.parse("content://com.example.customcp/YourDatabase"); ContentProviderClient yourCR = getContentResolver().acquireContentProviderClient(yourURI);Access the content provider as you would normally from App A. For example:
yourCursor = yourCR.query(yourURI, null, null, null, null);Note: you must either enclose the code within a try/catch block or include a "throws RemoteException" since the provider is not in App A.
CustomCP's Manifest must specify the provider, include the permissions allowed (e.g., read and/or write), and the provider must be exported. Here's an example:
<provider android:name="your.package.contentprovider.YourProvider" android:authorities="YourAuthority" android:readPermission="android.permission.permRead" android:exported="true" > </provider>
回答2:
in the manifest file, make sure that your
"provider android..>"is inside your
"application .. /application>"
hope that helps
回答3:
After creating the content provider , specify the content provider in the manifest file. You can mention content provider using the tag. Inside the provider tag dont forget to mention the name and authorities attributes. This declaration should be ..
<provider
android:name="pakgName.ProviderClassName"
android:authorities="pakgName.ProviderClassName"
android:multiprocess="true" >
</provider>
Here what you mention in the authorities attribute that should be match when you try to get the data from the provider.
回答4:
I know I am late, but just in case someone stumbles upon this question, I think this is the accepted answer. This one saved my day. So in this case, we have CustomCP in one app. Say, the other app is called AppDemo2. Then first define a permission in CustomCPs AndroidManifest.xml:
<permission android:name="com.any_string.MY_PERMISSION_FOR_SOMETHING"/>
<application ...
...></application>
Next you have to create a provider:
<application ... >
<provider
android:authorities="com.package_name_where_customCP_is"
android:name=".CustomCP"
android:readPermission="com.any_string.MY_PERMISSION_FOR_SOMETHING"
android:enabled="true"
android:exported="true"
android:multiprocess="true"
>
</provider>
<activity...>
Finally, in your 2nd app (AppDemo2 in my answer), open up its manifest file and add this permission:
<uses-permission android:name="com.any_string.MY_PERMISSION_FOR_SOMETHING"/>
This is the answer that worked for me. I hope this helps :)
来源:https://stackoverflow.com/questions/5714224/accessing-custom-content-provider-from-different-app