java .lang.SecurityException: Отказ в разрешении: открытие имени провайдера провайдера. требует com.prashant.ACCESS_DATA - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть два приложения (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...