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: