수색…


파일 공유하기

이 예에서는 파일을 다른 앱과 공유하는 방법을 배웁니다. 이 코드는 다른 모든 형식에서도 작동하지만 pdf 파일을 사용합니다.

로드맵 :

공유하려는 파일이있는 디렉토리를 지정하십시오.

파일을 공유하기 위해 우리는 응용 프로그램간에 안전한 파일 공유를 허용하는 클래스 인 FileProvider를 사용합니다. FileProvider는 사전 정의 된 디렉토리의 파일 만 공유 할 수 있으므로이를 정의합시다.

  1. 경로가 포함될 새 XML 파일을 만듭니다 (예 : res / xml / filepaths.xml).

  2. 경로 추가

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

FileProvider를 정의하고 파일 경로와 연결합니다.

이는 매니페스트에서 수행됩니다.
<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>

파일에 대한 URI 생성

파일을 공유하려면 파일의 식별자를 제공해야합니다. 이는 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);

코드에서 볼 수 있듯이 먼저 파일을 나타내는 새로운 File 클래스를 만듭니다. URI를 얻으려면 FileProvider에 문의하십시오. 두 번째 인수는 중요합니다. FileProvider의 권한을 전달합니다. 매니페스트에 정의 된 FileProvider의 권한과 같아야합니다.

다른 앱과 파일 공유

우리는 ShareCompat를 사용하여 다른 응용 프로그램과 파일을 공유합니다.
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);

선택기는 사용자가 파일을 공유 할 앱을 선택할 수있는 메뉴입니다. 플래그 Intent.FLAG_GRANT_READ_URI_PERMISSION은 URI에 대한 임시 읽기 액세스 권한을 부여하는 데 필요합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow