2016-09-06 9 views
0

コードをIntent.setDataAndType()からIntent.putExtra()に移行していますが、同じ結果が得られません。Intent.putExtra()が間違ったサードパーティのアプリケーションをプロンプトします

私はまた、アンドロイドNのデータを、他のOSレベルとは異なる方法で処理しています。

// coming to this method 
final FileType fileType 
final File file; 

final Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) { 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

    intent.putExtra(Intent.EXTRA_INTENT, FileProvider.getUriForFile(MyApplication.getAppContext(), MyApplication.getAppContext().getApplicationContext().getPackageName() + ".provider", file)); 
    //intent.setDataAndType(FileProvider.getUriForFile(MyApplication.getAppContext(), MyApplication.getAppContext().getApplicationContext().getPackageName() + ".provider", file), fileType.getMimeType()); 
} else { 
    intent.putExtra(Intent.EXTRA_INTENT, Uri.fromFile(file)); 
    intent.putExtra(Intent.EXTRA_MIME_TYPES, fileType.getMimeType()); 
    //intent.setDataAndType(Uri.fromFile(file), fileType.getMimeType()); 
} 

startActivity(intent); 

問題は、これは関係なく、私が送ったファイルタイプの、間違ったアプリケーションを開くしようとしていることである。

は、ここに私のコードです。 たとえば、PDFファイルを開くためのカレンダーや設定を開きたいとします。

Intent.setDataAndType()を使用すると、データが正しいアプリケーションに正しく送信されますが、大きなデータセットではandroid.os.TransactionTooLargeException例外が発生します。

提案がありますか?ありがとうございました。

編集: これは私が達成しようとしているものです。私はネットワーク(txt、html、pdf ...)からファイルをダウンロードし、ファイルをローカルに保存して、そのファイルタイプのデバイスのデフォルトリーダー内でそのファイルを開いて読んでみたい。ユーザーがそのファイルタイプのリーダーを選択していない場合は、アンドロイドのデフォルトのプロンプトが表示され、このファイルを読み取ることができるアプリを選択します。 ユーザーがこのファイルタイプを読み取るアプリを持っていない場合、このデバイスでファイルを開くことができないというメッセージが表示されます。

+0

あなたの所持品と達成したいことを説明して投稿を開始してください。これはかなり曖昧です。まともなご紹介をお願いします。 – greenapps

+0

が完了しました。それが役に立ったら教えてください。 – TooManyEduardos

+0

あなたは 'setDataAndType()'であなたが望むことはできますか?もしそうなら、なぜあなたは代わりに 'putExtra()'を使用しようとしていますか? –

答えて

1

あなたはまだだけsetClipData()経由setData()または追加されたものとURIセットに適用されるFLAG_GRANT_READ_URI_PERMISSIONとしてsetData()を使用する必要がある - タイプは自動的にFileProviderによってあなたのために提供されることに注意してください。

EXTRA_INTENT documentationによると、その余分はIntentオブジェクトを含む必要があり、ACTION_CHOOSERのためだけに使用されます。

関連する問題