Я относительно новичок в ContentProviders в Android, и мне понравилась идея совместного использования файлов активов между приложениями. Допустим, у меня есть 2 приложения: в AppA есть все красивые изображения, к которым я хочу получить доступ из AppB. AppA имеет StreamProvider, установленный следующим образом:
<provider
android:authorities="org.example.AssetProvider"
android:name="com.commonsware.cwac.provider.StreamProvider"
android:exported="true"
android:grantUriPermissions="true">
<meta-data
android:name="com.commonsware.cwac.provider.STREAM_PROVIDER_PATHS"
android:resource="@xml/assetpaths" />
</provider>
с assetspaths.xml следующим образом:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<asset name="assets" path="test"/>
</paths>
Все работает хорошо, и я могу получить доступ к своим активам через StreamProvider в своем AppA (getUriPrefix() для этого органа возвращает некоторое ненулевое значение).
Трудная часть начинается, когда я пытаюсь получить доступ к активам из моего AppB с помощью этого кода:
String COMMON_AUTHORITY = "org.example.AssetProvider";
Uri test = Uri.parse("content://" + COMMON_AUTHORITY)
.buildUpon()
.appendPath(StreamProvider.getUriPrefix(COMMON_AUTHORITY))
.appendPath("assets")
.appendPath("test.jpg")
.build();
InputStream is = getContentResolver().openInputStream(test)
Метод getUriPrefix() возвращает значение null, так как в приватном поле INSTANCES класса StreamProvider не зарегистрирован провайдер. Когда я записал префикс от запуска этого кода в AppA, а затем жестко закодировал его в AppB, все прошло хорошо, и я смог получить InputStream.
Мои вопросы -
- Есть ли способ получить доступ к префиксу моего авторитета из другого приложения?
- Есть ли другой способ получить доступ к файлам, хранящимся в APK-файле другого приложения?
Спасибо за ваш ответ заранее! :)