Gmailのメールアプリケーションなどのアプリケーションを使って、内部キャッシュに保存されたテキストファイルを送信します。 FileProviderを追加して、ファイルへの一度のアクセス許可を与えました。Gmailの添付ファイルにFileProviderのcache-pathを使用すると、「無効な」エラーが表示される
Android 5.0搭載のデバイスでアプリを実行すると機能します。私が6.0のデバイスでそれを実行すると、失敗します。一つの失敗は例外である:アクティビティがインテント処理するために見つかりません
{行為= android.intent.action.SEND FLG = 0x3のクリップ= {ヌルT:添付ファイルをログ}(補足を有する)}
これは、intent.setDataAndType (uri, "text/plain")
を省略した場合に発生します。
上記の文が含まれていると、もう1つのエラーはgmailのエラーです。それは添付ファイル名をグラフィックで表示して、それが正しくアクセスされたと信じさせてくれます。また、 "to"行には添付ファイルのパスが表示されます(基本的にuriですが、 "file:"という接頭辞がありません)。メッセージを送信しようとすると、「アドレスが無効です」というエラーメッセージが表示されます。 "to"行からこの偽のアドレスを削除すると、添付ファイルとともに正常にメッセージを送信できます。
つまり、さまざまな「セットアップ」ファイルを含む私のFileProviderの使用が機能しているようです。私は明らかに何かが間違っている、おそらくインテントの使用にあるかもしれません。ここに私のコードがあります - 偽の "to"アドレスを持つ後者のバージョン。
マニフェスト:(RES/xmlディレクトリにある)
<application
...
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.myapp.file_access"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
</application>
がfilepaths.xml:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<cache-path path="./" name="files" />
</paths>
意図を作成するためのコード:
public static void sendFile (Context context, String path)
{
File file = new File (path);
Uri uri = FileProvider.getUriForFile (context, "com.myapp.file_access", file);
Intent intent = new Intent (Intent.ACTION_SEND);
intent.putExtra (Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
intent.putExtra (Intent.EXTRA_SUBJECT, "your file");
intent.putExtra (Intent.EXTRA_STREAM, uri);
intent.putExtra (Intent.EXTRA_TEXT, "file attached.");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.setDataAndType (uri, "text/plain");
context.startActivity (intent);
}