画像をビューアで表示させる

分かってしまえば単純なんだけど、答えが分かるまではさっぱりという話。

file:///mnt/sdcard/somewhere/test.jpg

のようなURIを持っているとして、このファイルをいかにしてビューアで開くかという話。答えから言うと、

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(imageUri, "image/jpeg");
startActivity(intent);

これが、

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(imageUri);
intent.setType("image/jpeg");
startActivity(intent);

じゃダメだし、

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra(Intent.EXTRA_STREAM, imageUri);
intent.setType("image/jpeg");
startActivity(intent);

でもダメ。

でも、ACTION_SENDなら、

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, item._imageUri);
intent.setType("image/jpeg");
startActivity(intent);

みたいな感じで行ける。
この辺の仕組みの違いがさっぱり分からない。
どういう使い分けなんだろうか?