2010-12-07 6 views
4

Intentで開こうとしていますが、Androidはファイルタイプに適切なアプリケーションを開けません。ファイルを開くための右のmimeType

Intent i = new Intent(Intent.ACTION_VIEW); 
i.setData(Uri.fromFile(file)); 
startActivity(i); 

私は手動でMIMEタイプを指定すると、右のアプリケーションが開かれている - この場合のPictureViewerはを: - PDF、画像、すべてのもの - 音楽アプリで開かれ、すべてのファイルを次のコードを使用して

i.setDataAndType(Uri.fromFile(file), "image/*"); 

Androidのではなく、手動でファイルの拡張子から判断タイプを設定する適切なアプリケーションを開くために取得する方法はありますか?

答えて

1

これは他のアプリケーションによって異なります。 mime情報、ファイル拡張情報、またはその両方を含むインテントフィルタを設定している場合。ですから、他のアプリケーションに頼ることはできませんので、MIMEタイプなど、インテントを起動するときにできるだけ多くの情報を提供することをお勧めします。ここで

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(Uri.fromFile(file)); 
intent.setType(FileHelper.getMimeType(file)); 
startActivity(intent); 

である(の関連部分)私のヘルパークラスファイルからMIMEタイプを取得する:

+1

しかし、Androidが正しいタイプを自分のものであると判断できないのはなぜですか?インテントリファレンスは、 "インテントデータの明示的なタイプ(MIMEタイプ)を指定します。通常、タイプはデータ自体から推測されます。このアトリビュートを設定すると、その評価が無効になり、明示的なタイプが強制されます。これは私のコードではまったく動作しないので、間違いでなければなりません。 – Gubbel

1

あなたはこのような何かを行うことができます。

キーがMimeTypeMap

public class FileHelper 
{ 

    public static String getMimeType(File file) 
    { 
     return getMimeType(file.getName()); 
    } 

    public static String getMimeType(String fileName) 
    { 
     String extension = getExtension(fileName); 
     if (extension == null) 
      return null; 
     return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); 
    } 

    public static String getExtension(File file) 
    { 
     return getExtension(file.getName()); 
    } 

    public static String getExtension(String fileName) 
    { 
     int extensionDelimiter = fileName.lastIndexOf("."); 
     if (extensionDelimiter == -1) 
      return null; 
     return fileName.substring(extensionDelimiter + 1, fileName.length()); 
    } 
} 

を使用することですが、これがお役に立てば幸いです。

+0

完全に動作します。ありがとう。 SOのモデレーターが回答を回答としてマークする特権を持っていないのはなぜですか? MSDN Q/Aサイトにはこの素晴らしい機能があります。 – Sufian

+0

私はこれが時々png画像のようにうまくいかないことに気付きました。良い面では、私が試したすべてのファイルタイプでうまく動作する次のリンクの2番目のメソッドが見つかりました。 http://helloworldcodes.blogspot.com/2011/10/android-open-folder-with-default.html – Sufian

+0

本当にpngでは動作しませんか?私の側でそれは働いている。追加リンクありがとう:-) – Pascal

関連する問題