2011-01-29 17 views
6

これは既に回答があった場合に謝罪します。誰かがすでに回答している質問に私を指すことができれば、それは素晴らしいことでしょう...Androidでは、ファイルタイプに基づいてアプリケーションセレクタを表示するにはどうすればよいですか?

非常に簡単に、私はアプリケーションのリストをポップアップしたい私は音楽ファイル(mp3、ogg、何でも)を持っているなら、ファイルを処理できるすべての読み込まれたメディアアプリケーションのリストを表示したいと思います。ユーザーは1つを選択します。

私は次のようにこれを行うための意図を作成で遊んでてきた:

Intent myIntent = new Intent(); 
myIntent.setAction(Intent.ACTION_VIEW); 
myIntent.addCategory("android.intent.category.LAUNCHER"); 
myIntent.setType("mp3"); 
startActivity(myIntent); 

が、それはすべての時間をクラッシュ以来、私は明らかに、それは間違って得ています。 ACTION_VIEWの代わりにACTION_PICKまたはACTION_CHOOSERを使用する必要がありますか?

さらに重要なのは、すべてのメディアプレーヤーをIntent.type以外のもので簡単に定義できるかどうかです。優しくしてください

...私はタイプが小文字で、適切なMIMEタイプでなければなりません信じていますが、私は、このインスタンスで使用するかわからないんだけど:)

+0

誰かが答えを持っているかどうかを確認するためにこれを送ります(部分的な答えでさえ)... – roryhewitt

+0

私は同様の問題がありました。私は、次のソリューションを使用してアプリケーションチューザを取得しました:http://stackoverflow.com/questions/7635764/application-selection-dialog-based-on-filetypeこのソリューションは、独自のダイアログを構築する必要もなくなります。 – kaspermoerch

答えて

8

特定のインテントを正常に開くことができるアプリケーションを取得するには、PackageManagerを使用します。上記のようにインテントを作成し、このコードを使用してインテントを処理できるアプリケーションを取得するだけです。

Intent myIntent = new Intent(); 
myIntent.setAction(Intent.ACTION_VIEW); 
myIntent.addCategory("android.intent.category.LAUNCHER"); 
myIntent.setType("mp3");  

PackageManager manager = getPackageManager(); 
List<ResolveInfo> info = manager.queryIntentActivities(
    myIntent, PackageManager.MATCH_DEFAULT_ONLY); 

これにより、アイコンやpackagenameなど、意図を処理できるプログラムに関するすべての情報が表示されます。これらのオプションを使用してダイアログボックスを作成し、ユーザーが選択したオプションを保存することができます。

+0

「上記の意図」によって、あなたは@ sstnのコードを意味しますか?この場合、startActivity()の代わりに**あなたのパッケージマネージャコード**を使用することを意味しますか? – roryhewitt

+0

それから、必要なすべての情報が得られます。コードをちょっときれいにしましょう。 –

+0

それはすばらしく見える!適切なダイアログボックスを表示するコードがないとは思いませんか?それとも、自分の「標準」を作成するだけですか? – roryhewitt

1

私はあなたがこのチューを見たいと仮定しますファイル(またはURL)を開き、それを処理する複数のアプリケーションが登録されている場合は、ダイアログを開きますか?例えば。あなたはYouTubeのURLを開き、YouTubeプレーヤーやブラウザを使用することができますか?

File f = new File("/sdcard/IMG_0114.JPG"); 
Uri uri = Uri.fromFile(f); 

Intent i = new Intent(Intent.ACTION_VIEW); 
// use setDataAndType() - setData() and setType() cancel each other 
i.setDataAndType(uri, "image/jpeg"); 
i.putExtra("preview", false); 
i.putExtra("key_filename", "/sdcard/IMG_0114.JPG"); 
i.putExtra(Intent.EXTRA_STREAM, uri); 
i.putExtra("sort_order", 0); 

// It's one of the flag combinations: 
i.setFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); 

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
     Intent.FLAG_ACTIVITY_SINGLE_TOP | 
     Intent.FLAG_ACTIVITY_MULTIPLE_TASK | 
     Intent.FLAG_DEBUG_LOG_RESOLUTION); 

startActivity(i); 

EDIT:私は(ファイルブラウザ経由)の画像を開きたいときにシステムが送信する意図の一種である

は、作業(最小限)ソリューションを取得するためのコードを修正しました。

余分なデータのどのフィールドを設定する必要があるのか​​わかりません - ドキュメントが見つかりませんでした。

+0

あなたは正しいですが、私は選択ダイアログを見たいです。しかし、実際にはファイルを開こうとはしません(実際には、特定のファイルを実際には持っていません)。そのファイルを開くためのメソッドを返すことができます。 – roryhewitt

+0

基本的には、ファイルタイプ**のチューザをポップアップして、選択したアプリケーションの名前を(私のアプリケーションで)保存することができます。それは理にかなっていますか? – roryhewitt

関連する問題