Accessing custom content provider from different app

后端 未结 5 1758
醉梦人生
醉梦人生 2020-12-17 10:15

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 ap

相关标签:
5条回答
  • 2020-12-17 10:51

    in the manifest file, make sure that your

    "provider android..>"
    is inside your

     "application .. /application>" 

    hope that helps

    0 讨论(0)
  • 2020-12-17 11:00

    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 :)

    0 讨论(0)
  • 2020-12-17 11:07

    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:

    1. 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);

    2. 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.

    3. 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>
      
    0 讨论(0)
  • 2020-12-17 11:09

    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.

    0 讨论(0)
  • 2020-12-17 11:13

    You can use below code to get the content provider data in other app.. You need to use content resolver to fetch the data..

    try {
        //URL provided in first app while creating the content provider
        val URL = "content://com.test.localstorage.MyContentProvider/authentication"
        val data = Uri.parse(URL)
        val cursor: Cursor? = contentResolver.query(data, null, null, null, "user_id")
    
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                do {
                    return cursor.getString(cursor.getColumnIndex("user_id")).toString()
                } while (cursor.moveToNext())
            }
        }
    } catch (ex: Exception) {
        ex.printStackTrace()
    }
    
    0 讨论(0)
提交回复
热议问题