Добавление нескольких поставщиков файлов в приложение Android - PullRequest
0 голосов
/ 26 ноября 2018

ребята, я работаю над приложением для Android, для которого мне нужно, чтобы приложение библиотеки зависимостей от внешнего приложения (файл .aar) имело своего собственного провайдера файлов, и у моего приложения есть своя. Библиотека

хорошо работает при запускеэто отдельное приложение, но когда я включаю его в приложение, функция камеры не работает.Я получаю следующую ошибку

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)' on a null object reference

после файла манифеста приложения

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

, и ниже приводится файл манифеста модуля lib

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.ma.bot.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

и приложение, и модуль lib имеют разные имена пакетов, как я добавляю эти 2 файловых провайдера в приложение. Я также пытаюсь включить использование нескольких файловых провайдеров, но при компиляции приложения я получаю ошибку синтаксического анализа XML.

android:authorities="${applicationId}.provider;com.ma.bot.provider"

как решитьэто.

1 Ответ

0 голосов
/ 28 ноября 2018

Ребята, я нашел решение по этой ссылке Можно ли использовать несколько прав доступа с FileProvider?

В основном проблема в том, что моя библиотека и приложение имеют одно и то же имя android.support.v4.content.FileProvider, поэтомуЭто происходит при слиянии манифестов, чтобы избежать этого, мне нужно дефилировать пустой провайдер File, расширяющий класс, и использовать его имя провайдера

<provider
            android:name="com.MAG.MAGFileProvider"
            android:authorities="${applicationId}.provider;"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

и объявить класс следующим образом

import android.support.v4.content.FileProvider;
public class MAGFileProvider extends FileProvider
{
    //we extend fileprovider to stop collision with chatbot library file provider
    //this class is empty and used in manifest
}
...