0

Android にインストールされているアプリケーションを検出し、そのアプリケーションでファイルを開くコードを作成しました。たとえば、Word 文書は Office apk で開く必要があります。

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
Uri data = Uri.fromFile(temp_file);
String type = getMimeType(temp_file.getName());
intent.setDataAndType(data, type);
this.startActivity(intent);

上記のコードで、 temp_fileは開く必要があるファイルです。以下は、MIME タイプを取得するために作成した一般化されたコードです。

public static String getMimeType(String url) {
        String type = null;
        String extension = MimeTypeMap.getFileExtensionFromUrl(url);
        if (extension != null) {
            MimeTypeMap mime = MimeTypeMap.getSingleton();
            type = mime.getMimeTypeFromExtension(extension);
        }
        return type;
    }

しかし、実行すると、android.content.ActivityNotFoundException例外がスローされます。だから、ここで何か間違ったことをしていますか?

4

3 に答える 3

1

ファイル名を呼び出しgetMimeType()て渡しています。ただし、メソッドgetMimeType()には URL が必要です。のドキュメントには、MimeTypeMap.getFileExtensionFromUrl()具体的には次のように記載されています。

このメソッドは、URL の拡張子を取得するための便利なメソッドであり、他の文字列の結果は未定義です。

あなたはおそらくnullMIMEタイプを取得しています。デバッグ ログを追加し、何getMimeType()が返されるかを確認します。

Also, look in the logcat. It should tell you the content of the Intent it is trying to resolve. That should also give you a hint.

于 2012-10-10T22:06:23.503 に答える
0
 button.setOnClickListener(new View.OnClickListener() {

                  @Override
                  public void onClick(View v) {
                        // TODO Auto-generated method stub
                        File file=new File("/sdcard/yourfile");
                        if(file.exists())
                        {
                              Uri path=Uri.fromFile(file);
                              Intent intent=new Intent(Intent.ACTION_VIEW);
                              intent.setDataAndType(path, "application/readername");

                              try
                              {

                                    startActivity(intent);
                              }
                              catch(ActivityNotFoundException e)
                              {
                                    Toast.makeText(TestActivity.this, "No software for PDF", Toast.LENGTH_SHORT).show();
                              }
                        }
                  }
            });
于 2012-10-10T09:01:43.000 に答える