Szukaj…


Udostępnianie pliku

W tym przykładzie dowiesz się, jak udostępnić plik innym aplikacjom. W tym przykładzie użyjemy pliku pdf, chociaż kod działa również z każdym innym formatem.

Mapa drogowa:

Określ katalogi, w których umieszczane są pliki, które chcesz udostępnić

Do udostępniania plików używamy FileProvider, klasy umożliwiającej bezpieczne udostępnianie plików między aplikacjami. FileProvider może udostępniać pliki tylko w predefiniowanych katalogach, więc zdefiniujmy je.

  1. Utwórz nowy plik XML, który będzie zawierał ścieżki, np. Res / xml / filepaths.xml

  2. Dodaj ścieżki

    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <files-path name="pdf_folder" path="documents/"/>
    </paths>
    

Zdefiniuj FileProvider i połącz go ze ścieżkami plików

Odbywa się to w manifeście:
<manifest>
    ...
    <application>
        ...
        <provider
            android:name="android.support.v4.context.FileProvider"
            android:authorities="com.mydomain.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>
        ...
    </application>
    ...
</manifest>

Wygeneruj identyfikator URI dla pliku

Aby udostępnić plik, musimy podać identyfikator pliku. Odbywa się to za pomocą identyfikatora URI (Uniform Resource Identifier).
// We assume the file we want to load is in the documents/ subdirectory
// of the internal storage
File documentsPath = new File(Context.getFilesDir(), "documents");
File file = new File(documentsPath, "sample.pdf");
// This can also in one line of course:
// File file = new File(Context.getFilesDir(), "documents/sample.pdf");

Uri uri = FileProvider.getUriForFile(getContext(), "com.mydomain.fileprovider", file);

Jak widać w kodzie, najpierw tworzymy nową klasę pliku reprezentującą plik. Aby uzyskać identyfikator URI, prosimy FileProvider o jego dostarczenie. Drugi argument jest ważny: przekazuje on uprawnienia FileProvider. Musi być równy uprawnieniu FileProvider zdefiniowanego w manifeście.

Udostępnij plik innym aplikacjom

Używamy ShareCompat do udostępniania pliku innym aplikacjom:
Intent intent = ShareCompat.IntentBuilder.from(getContext())
    .setType("application/pdf")
    .setStream(uri)
    .setChooserTitle("Choose bar")
    .createChooserIntent()
    .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

Context.startActivity(intent);

Wybieracz to menu, z którego użytkownik może wybrać, z którą aplikacją chce udostępnić plik. Flaga Intent.FLAG_GRANT_READ_URI_PERMISSION jest potrzebna do przyznania tymczasowego uprawnienia dostępu do odczytu do identyfikatora URI.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow