Sök…


Dela en fil

I det här exemplet lär du dig att dela en fil med andra appar. Vi kommer att använda en pdf-fil i det här exemplet även om koden fungerar med alla andra format också.

Färdplanen:

Ange de kataloger där filerna du vill dela är placerade i

För att dela filer använder vi en FileProvider, en klass som möjliggör säker fildelning mellan appar. En FileProvider kan bara dela filer i fördefinierade kataloger, så låt oss definiera dessa.

  1. Skapa en ny XML-fil som kommer att innehålla sökvägar, t.ex. res / xml / filepaths.xml

  2. Lägg till banorna

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

Definiera en FileProvider och länka den till filvägarna

Detta görs i manifestet:
<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>

Generera URI för filen

För att dela filen måste vi ange en identifierare för filen. Detta görs med en 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);

Som du kan se i koden gör vi först en ny filklass som representerar filen. För att få en URI ber vi FileProvider att skaffa oss en. Det andra argumentet är viktigt: det passerar en FileProviders auktoritet. Det måste vara lika med myndigheten för FileProvider som definieras i manifestet.

Dela filen med andra appar

Vi använder ShareCompat för att dela filen med andra appar:
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);

En väljare är en meny som användaren kan välja med vilken app han / hon vill dela filen. Flaggan Intent.FLAG_GRANT_READ_URI_PERMISSION behövs för att bevilja URI tillfällig läsåtkomsttillstånd.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow