2011-12-17 14 views
0

テキストファイルを扱うアンドロイドアプリケーションを作成しています。ユーザーが電子メール、Dropboxなどを使ってファイルを共有できるようにしたいのですが、htmlファイルの場合はブラウザで開くこともできます。インテントを使用してブラウザでファイルを開くか共有する

両方のコードを別々に行うことに問題はありません。これらは、ファイル共有するためのものです:

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("text/plain"); 
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + path)); 
startActivity(Intent.createChooser(intent, "Send File")); 

を、これは、ブラウザでファイルを開くためのものです:

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity"); 
intent.setData(Uri.parse("file://" + path); 
startActivity(Intent); 

私の問題は、私は、ユーザーをお願いしたくないということです彼があらかじめ望むオプション。インテント・チューザーに両方のタイプの操作をリストしたい。私はtext/plainの代わりにtext/htmlを使用しようとしましたが、URIがhttpで始まるときにブラウザはインテントだけを聞きます。

これを達成するためのアイデアはありますか?

+0

私の現在の解決策は、ChooserActivityのコードをリッピングし、自分のMULTI_ACTION_CHOOSERインテントを実装することです。 –

答えて

1

2つのロスターをマージするという点では、自分で行うこと以外に選択肢はありません。

しかし、あなたの現在の実装の両方が問題があります。

  • text/plain一つはEXTRA_STREAMを処理していないアプリケーションのために失敗します - あなたはUriを使用して検討する必要があり、おそらくあなたはそれによってContentProviderを指しますデータのサポートとしてUriが一般的に使用されるように、ファイルを利用可能にしてください。

  • このブラウザが存在しないデバイスでは、2番目のデバイスがクラッシュします。また、このブラウザではAndroidのすべてのバージョンでfile://Uriの値を一貫して読み込むことができますが、これは安全な前提ではありません。ブラウザの作成者がローカルファイルをロードしたい場合は、マニフェストにそのファイルのサポートが追加されます。 HTTP URLがない場合は、WebViewウィジェットを使用してください。プロフェッショナルグレードのコードでは、com.androidを参照する必要はありません。

関連する問題