2016-03-30 14 views
0

FileProviderを使用して、電子ファイル(または同様のアプリケーション)を介してファイルを送信するための内部ファイルストレージをアプリから読み込む予定があります。このコードはGmailを除いてどこでもうまく機能します.Gmailは不思議なことに、電子メールのアドレスのリストにプロバイダパス自体のバージョンを追加します。FileProvider添付ファイルを使用してインテントで電子メールに追加された迷子ファイルパス

public static Intent getSendIntent(Uri uri) { 
    final Intent i = new Intent(Intent.ACTION_SEND); 
    i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    i.setDataAndType(uri, "message/rfc822"); 
    i.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); 
    i.putExtra(Intent.EXTRA_SUBJECT, "Export"); 
    i.putExtra(Intent.EXTRA_TEXT, "See the attached..."); 
    i.putExtra(Intent.EXTRA_STREAM, uri); 
    return i; 
} 

これは、活動を開始するためのコードは次のとおりです:

これは意図を生成するコードであるウェルに加えてなどスラック、Evernoteの、でなく、Gmailの

File file = new File(getFilesDir(), filename); 
Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.myapplication.provider", file); 
Intent i = Utils.getSendIntent(uri); 

try { 
    startActivity(Intent.createChooser(i, "Send file...")); 
} catch (Exception e) { 
    Log.d(TAG, "failed to start send activity: " + e.getMessage()); 
    Toast.makeText(MainActivity.this, "No suitable activity found for export.", Toast.LENGTH_SHORT).show(); 
} 

作品私が提供した電子メールアドレス、この種類の別の宛先が追加されます:

//com.example.myapplication.provider/my_files/filefile.csv

は、電子メールがメッセージから手動で削除されるまで送信されないようにします。メッセージに関する他のすべては、期待通りです。

これを防ぐ手がかりはありますか?

+1

'file'は実際に' message/rfc822'形式のファイルを指していますか? – CommonsWare

+0

@CommonsWareいいえ、実際にあなたの質問は私の問題の原因に私を導いた。私はちょうどsetDataAndTypeを標準のsetTypeに置き換えました。 *頭を叩く – k3davis

答えて

0

以下のCaptain Obviousソリューションが問題を解決しました。

は交換してください:

i.setDataAndType(uri, "message/rfc822"); 

で:

i.setType("message/rfc822"); 

推察CommonWareの質問@として、ファイルの内容がRFC822形式で、それ自体ではありません、以来。

関連する問題