Konfiguruję udostępnianie plików

Aby bezpiecznie oferować plik z Twojej aplikacji innej aplikacji, musisz skonfigurować jej udostępnianie bezpieczny uchwyt pliku w postaci identyfikatora URI treści. Android Komponent FileProvider generuje identyfikatory URI treści dla zgodnie ze specyfikacją podaną w pliku XML. Z tego wykładu dowiesz się, jak dodać domyślne implementacji FileProvider w Twojej aplikacji i dowiedz się, określić pliki, które chcesz zaoferować innym aplikacjom.

Uwaga: klasa FileProvider jest częścią Biblioteka główna AndroidX. Informacje na temat o dodawaniu tej biblioteki do aplikacji, zobacz Deklarowanie zależności.

Podaj FileProvider

Aby zdefiniować FileProvider dla aplikacji, musisz wpisać w pliku manifestu. Ten wpis określa uprawnienia do użycia przy generowaniu identyfikatorów URI treści oraz nazwa pliku XML określającego katalogi, które może udostępniać aplikacja.

Ten fragment kodu pokazuje, jak dodać do pliku manifestu Element <provider>, który określa FileProvider, klasa autoryzacji i Nazwa pliku XML:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
        ...>
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.example.myapp.fileprovider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>
        ...
    </application>
</manifest>

W tym przykładzie atrybut android:authorities określa urząd URI którego chcesz używać w przypadku identyfikatorów URI treści generowanych przez FileProvider W tym przykładzie urząd to com.example.myapp.fileprovider. Dla siebie aplikacji, określ organ składający się z jej Wartość android:package z ciągiem znaków „fileprovider” który został do niego dołączony. Aby dowiedzieć się więcej, o wartości autorytetu, zobacz temat Identyfikatory URI treści oraz dokumentacja android:authorities.

Element podrzędny <meta-data> klucza <provider> wskazuje plik XML określający katalogi, które chcesz w udostępnianiu. Atrybut android:resource to ścieżka i nazwa pliku (bez z rozszerzeniem .xml.Zawartość tego pliku została opisana w następnej sekcji.

Określ katalogi do udostępniania

Gdy dodasz FileProvider do pliku manifestu aplikacji, musisz wskazać katalogi zawierające pliki, które chcesz udostępnić. Aby podać parametr zacznij od utworzenia pliku filepaths.xml w res/xml/ lub podkatalogu projektu. W tym pliku określ katalogi, dodając element XML dla każdego katalogu. Ten fragment kodu zawiera przykładową zawartość res/xml/filepaths.xml Fragment kodu pokazuje też, jak udostępnić podkatalog katalogu files/ w pamięci wewnętrznej:

<paths>
    <files-path path="images/" name="myimages" />
</paths>

W tym przykładzie tag <files-path> współużytkuje katalogi w tagach files/ w pamięci wewnętrznej aplikacji. Atrybut path udostępnia podkatalog images/ witryny files/. name informuje element FileProvider, że ma dodać segment ścieżki myimages do identyfikatorów URI zawartości dla plików w podkatalogu files/images/.

Element <paths> może mieć wiele elementów podrzędnych, z których każdy określa inne katalog do udostępnienia. Oprócz elementu <files-path> możesz też używaj elementu <external-path> do udostępniania katalogów w pamięci zewnętrznej. element <cache-path> służący do udostępniania katalogów w wewnętrznej pamięci podręcznej katalogu. Więcej informacji o elementach podrzędnych, które określają katalogi udostępnione, znajdziesz tutaj: Dokumentacja źródłowa FileProvider.

Uwaga: plik XML to jedyny sposób określania katalogów, udostępniać, nie da się dodać katalogu programowo.

Masz już pełną specyfikację: FileProvider który generuje identyfikatory URI treści dla plików znajdujących się w katalogu files/ aplikacji pamięci wewnętrznej ani plików w podkatalogach files/. Gdy aplikacja generuje identyfikator URI treści, zawiera informacje o urzędzie określonym w <provider> element (com.example.myapp.fileprovider), ścieżkę myimages/ oraz nazwę pliku.

Jeśli na przykład zdefiniujesz właściwość FileProvider zgodnie z i wysyłać żądanie identyfikatora URI treści, default_image.jpg, FileProvider zwraca wartość ten identyfikator URI:

content://com.example.myapp.fileprovider/myimages/default_image.jpg

Dodatkowe informacje znajdziesz tutaj: