Android Intent - 我如何打开文件

时间:2012-06-20 10:35:24

标签: android android-intent

要打开图像或声音,我们可以使用此代码:

public String getExt(String filename)
{
    int dotIndex = 0;
    for(int i = filename.length()-1; i >= 0; i--)
    {
        if(filename.charAt(i) == '.')
        {
            dotIndex = i;
            break;
        }
    }

    return filename.substring(dotIndex + 1, filename.length());
}

public String getTypeAction(String s)
{
    int slashIndex = 0;
    for(int i = 0; i < s.length(); i++)
    {
        if(s.charAt(i) == '/')
        {
            slashIndex = i;
            break;
        }
    }
    return s.substring(0, slashIndex);
}
//////
//////

MimeTypeMap mime = MimeTypeMap.getSingleton();
String ext = getExt(file_to_action.getName());
ext = ext.toLowerCase();

String type = mime.getMimeTypeFromExtension(ext);

Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file_to_action), getTypeAction(type) + "/*" );
startActivity(intent); !>

但问题是当我想打开任何不同的文件时,例如:.mhtml,.bak。 APK。当我这样做时,我的应用程序崩溃。我不知道问题出在哪里,我有.mhtml,.odt extenio的应用程序,但我的应用程序无法使用此应用程序打开文件。 我如何打开所有文件格式或如何检查任何文件格式的可用应用程序?

2 个答案:

答案 0 :(得分:1)

你也可以这样做

 File file = new File(filepath);

  String extension =   file.getName().substring(file.getName().lastIndexOf(".")+1);

    MimeTypeMap mime = MimeTypeMap.getSingleton();
    String type = mime.getMimeTypeFromExtension(extension);
    Intent intent = new Intent();

    intent.setAction(android.content.Intent.ACTION_VIEW);
  intent.setDataAndType(Uri.fromFile(file), type);
    startActivity(intent);

答案 1 :(得分:0)

此崩溃是因为没有应用程序来处理手机上安装的那类数据。

您应该使用PackageManager中的queryIntentActivies(intent,flags)来查看是否有任何应用可以处理您的Intent。如果List<ResolveInfo>大小大于0,则有一些应用程序可以处理您的数据。如果大小为0,则应显示Toast并告知用户无法处理数据,并且在这种情况下也不要调用startActivity()