2012-06-26 23 views
5

これは簡単な質問ですが、回答を見つけることができませんでした。JavaとAndroid:インテントで複数のファイルを開くには?

私はイメージビューアを開こうとしているAndroidアプリを作っています はいくつかの画像を表示しています。私は1つのイメージでこれを行う方法を知っています:

Intent intent = new Intent(); 
    intent.setAction(android.content.Intent.ACTION_VIEW); 
    File file1 = new File("/mnt/sdcard/photos/20397a.jpg"); 
    intent.setDataAndType(Uri.fromFile(file1), "image/jpg"); 
    startActivity(intent); 

これは完全に動作します。しかし、どのように私はいくつかの画像をビューアに渡すのですか?

ありがとうございます! L.

答えて

1

私は、「画像ビューア」はアンドロイドではありません画像ビューア

を開きたいです。デバイスとユーザーには、ローカルファイルからファイルがロードされたimage/jpegの多数の、さまざまなアプリケーションが表示されます。

しかし、ビューアーに複数の画像を渡すにはどうすればよいですか?

申し訳ありませんが、標準ではありませんIntent任意の種類の複数のファイルを開くには。

また、/mnt/sdcard/をアプリにハードコードしないでください。 Environmentクラスの適切なメソッドを使用して、外部ストレージのディレクトリを判断してください。

+0

に「image/jpg」を変更する私はintent.action_viewでデフォルトで開かれたものを意味しました。複数のファイルについて、複数のファイルではない場合、スライドショーはどのように機能しますか? –

+0

@ LuisA.Florit: "イメージビューアでは、デフォルトでintent.action_viewで開かれたものを意味しました" - 何百ものものがあります。 "複数のファイルではない場合、スライドショーはどのように機能しますか?AFAIKはサードパーティのアプリケーションで使用するための標準的な 'Intent'アクション文字列を介して「スライドショー」機能を公開していません。 – CommonsWare

+0

"デフォルトのもの"は1つだけを意味します(セットアップ/デバイスごとに異なりますが、それは問題ありません)。そのため、元の投稿で提供したコードでビューアを指定する必要はありません私が知っているすべての視聴者は、複数のファイルを管理しています... –

1

表示するすべてのファイルを配列にリストする必要があります。次に配列の1つを表示し、ドラッグすると次の画像を表示します。

ArrayList list; 

private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // Ansi date format 

list = new ArrayList(); 
    String path = "c:/temp/"; 
    File dir = new File(path); 
    for (String dirListing : dir.list()) { 
    if ((dirListing.endsWith(".jpg")) || 
     (dirListing.endsWith(".png")) || 
     (dirListing.endsWith(".gif"))) { 
     try { // write all file-info to a arraylist 
     File f = new File(path+dirListing);  
     list.add(f.getCanonicalPath()); 
     list.add(f.getName()); 
     list.add(String.valueOf(f.length())); 
     String lastModified = dateFormat.format(new Date(f.lastModified())); 
     list.add(lastModified); 
     } 
     catch (IOException e) { 
     e.printStackTrace(); 
     } 
     catch (IndexOutOfBoundsException e) { 
     e.printStackTrace(); 
     } 
    } 
    } 

これで、アレイを読み込んで1つずつ表示することができます。

+0

申し訳ありませんが、intent.setDataAndType(Uri.fromList(list)、 "image/ –

+0

あなたが与えた例は、その時点で1つの画像しか表示していません。私が与えたコード例では、フォルダを読み込み、すべての(画像)ファイルを表示する必要があります。あなたのプログラムではarraylist(名前付きリスト)を読み、paを取得する必要がありますth +ファイル名を表示します。あなたがアンドロイドデバイスをドラッグすると、次の写真を読む必要があります。私は正常に処理で私のコードを書くので、私は正しい作業コードを提供することはできません。 – Dippo

+0

あなたのコードは次のようになります: Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); ファイルfile1 =新しいファイル(リスト[0] +リスト[1]);intent.setDataAndType(Uri.fromFile(file1)、 "image/jpg"); startActivity(インテント); 次のイメージを表示する必要がある場合は、[0]と[1]のリストに4を追加する必要があります。 – Dippo

1

ハードコーディングされたパスは使用しないでください。

変更この行:

File sdDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 

File file1 = new File("/mnt/sdcard/photos/20397a.jpg"); 

それはあなたのSDカードの親ディレクトリをしたい場合は、Environment.DIRECTORY_PICTURESを削除することができます

/storage/emulated/0/Picture 

に探します。

単一のファイル20397a.jpgを指定しているため、他の画像を見ることができません。

そして、あなたは画像以外の他のコンテンツを見たいならば、画像ビューアによって「image/*

関連する問題