У меня есть два приложения (Xamarin android и android native app), подписанные с одним и тем же хранилищем ключей. Я пытаюсь получить доступ к данным из App-A, используя определитель содержимого внутри App-B.
Приложение A (приложение Xamarin):
Xamarin Android код содержимого провайдер, где я добавил пользовательское разрешение:
[ContentProvider(new[] { "com.prashant.DataSharingContentProvider" }, Name = "com.prashant.DataSharingContentProvider", Exported = true, Permission = "com.prashant.ACCESS_DATA")]
public class CredentialSharingContentProvider : ContentProvider
{ //provider name and content uri is here which has no any issue }
Мой Xamarin Android Код активности, в который я помещаю данные внутри ContentResolver
ContentValues values = new ContentValues();
// Don't set _ID if you want to auto increment it.
values.Put(ContentProvider._ID, 1);
values.Put(ContentProvider.NAME, name);
values.Put(ContentProvider.PHONE, phone);
Android.Net.Uri uri = ContentResolver.Insert(ContentProvider.CONTENT_URI, values);
values.Clear();
Код моего файла манифеста, в который я добавил пользовательское разрешение
<permission android:name="com.prashant.ACCESS_DATA" android:protectionLevel="signature" />
Приложение B (Android собственное приложение):
Мой Android собственный код, где я получаю значения от поставщика контента:
Uri dataUri = CONTENT_URI; //there is no issue in content URI
Cursor c = getContentResolver().query(dataUri, null, null, null, null);
if (Objects.requireNonNull(c).moveToFirst())
{
System.out.println("Credentials:\n"
+ "ID: " + c.getString(c.getColumnIndex(_ID)) + "\n"
+ "NAME: " + c.getString(c.getColumnIndex(NAME)) + "\n"
+ "PHONE: " + c.getString(c.getColumnIndex(PHONE)) + "\n"
);
txtview.setText(c.getString(c.getColumnIndex(_ID))+
"\n"+c.getString(c.getColumnIndex(NAME))+
"\n"+c.getString(c.getColumnIndex(PHONE)));
}
Мой собственный код манифеста android, в котором я использовал одно и то же разрешение
<uses-permission android:name="com.prashant.ACCESS_DATA" />
Я не понимаю, что не так, когда я подписываю оба приложения с одним и тем же хранилищем ключей и первым открывающим приложением. А чтобы я поместил данные в контент-провайдере, а затем открыл App-B, чтобы получить данные. Но мой App-B вылетает с ошибкой ниже.
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pjadhav.contentproviredretrieve/com.pjadhav.contentproviredretrieve.MainActivity}: java.lang.SecurityException: Permission Denial: opening provider com.prashant.DataSharingContentProvider from ProcessRecord{b53611b 7034:com.pjadhav.contentproviredretrieve/u0a412} (pid=7034, uid=10412) requires com.prashant.ACCESS_DATA or com.prashant.ACCESS_DATA