web-dev-qa-db-ja.com

Android Fileprovider:IllegalArgumentException:を含む構成済みのルートが見つかりませんでした

Android FileProviderについて質問があります。PDFドキュメントを保存してデフォルトのプログラムで開きたいのですが、外部ストレージに保存したくありません。

PDFをFilesDirectory/export/temp.pdfに正常に保存した後、
FileProvider.getUriForFile()を使用してURIを生成しようとしました。

File path = new File(getFilesDir(), "export");
File pdf = new File(path + File.separator + "temp.pdf");
pdf.getParentFile().mkdirs();

if (!pdf.exists())
    pdf.createNewFile();

Uri uri = FileProvider.getUriForFile(getApplicationContext(), "?", pdf);

質問:2番目のパラメーター「Authority」として何を渡す必要がありますか?ファイルの場所、URI許可を付与できるクラスなどですか?私が試したことは何でも、IllegalArgumentExceptionまたはNullPointerExceptionにつながりました。 My FileProvider(XML):

<provider         
    Android:name="Android.support.v4.content.FileProvider"           
        Android:authorities="com.example.myApp.myActivity"
        Android:exported="false"
        Android:grantUriPermissions="true">

        <meta-data                 
             Android:name="Android.support.FILE_PROVIDER_PATHS"                           
             Android:resource="@xml/file_path"/>                                       
</provider>

参照ファイル:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <cache-path name="pdfTemplates" path="export/" />
</paths>
15
user2212120

私はそれを持っている。 2つの異なる問題がありました

  1. 最初の問題はCodeDivingによって回答されました。 getUriForFile呼び出しには、プロバイダー宣言の権限を使用する必要がありました。他のクラスを使用すると、NullPointerExceptionが発生しました。

  2. FilesDirectoryからファイルを取得しようとしましたが、file_pathで、Directoryをキャッシュするためのパスのみを宣言しました。 'files-path'に変更すると、機能しました。このエラーにより、IllegalArgumentExceptionが発生しました。

11
user2212120

FileProviderファイル(XML)によると、2番目のパラメーターはcom.example.myApp.myActivityです。あれは

Uri uri = FileProvider.getUriForFile(getApplicationContext(),
                                     "com.example.myApp.myActivity", pdf);
8
CodeDiving