Доступ к данным из контент-провайдера другого приложения - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть тестовое приложение, написанное на Xamarin и портированное на Android.Он содержит экспортированный контент-провайдер со следующими данными из файла манифеста.

<provider android:name="md5c7302988dec23c3faede6ee623ad91b8.AppStateProvider" android:exported="true" android:authorities="com.example.myapp.AppStateProvider"/>

Однако я не уверен в том, как запрашивать и распечатывать данные из отдельного отдельного приложения Android, написанного в Android Studio.Я нашел различные учебные пособия и тому подобное, но многие из них устарели, используя более старый метод курсора, а не Content Resolver, поэтому выявляется много ошибок и происходит сбой приложения.

Какой правильный способ следоватьчтобы получить эти данные между приложениями, пожалуйста.

РЕДАКТИРОВАТЬ: Это то, что я использую ContentResolver

Uri yourURI = Uri.parse("content://com.example.myapp.AppStateProvider/AppState");
ContentProviderClient yourCR = getContentResolver().acquireContentProviderClient(yourURI);

    try {
        Cursor yourCursor = yourCR.query(yourURI, null, null, null, null);
        Log.i("stuff", String.valueOf(yourCursor));
    } catch (RemoteException e) {
        e.printStackTrace();
    }

, но это происходит с:

Unable to start activity ComponentInfo{com.cpreader/com.cpreader.MainActivity}: java.lang.SecurityException: Unknown packagename

Удаление кода CP, приложение работает нормально (просто простое действие Hello World)

EDIT: я изменил имя CP, чтобы использовать имя, а не права доступа, и получил ошибку, как и ожидалось Failed to find provider info for md5c7302988dec23c3faede6ee623ad91b8.AppStateProvider

, что означает, что имя органа, которое я имею, является правильным, и он может найти этого провайдера, поэтому что-то еще с именем пакета приводит к сбою

EDIT2:

Следующий кодтакже вылетает с той же ошибкой: Caused by: java.lang.SecurityException: Unknown packagename

ContentResolver cr = getContentResolver();
    Cursor cursor = cr.query(uri, null, null, null, null);
    if (cursor != null) {
        cursor.moveToFirst();
        String filePath = cursor.getString(cursor.getColumnIndex("Name"));
        cursor.close();

        Log.i("stuff", filePath);
...