我正在尝试使用File
打开Intent
,但Android无法为文件类型打开正确的应用程序。
使用以下代码,每个文件 - pdf,图像,所有内容 - 都会通过音乐应用程序打开:
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.fromFile(file));
startActivity(i);
当我手动指定mimeType时,会打开正确的应用程序 - 在本例中为pictureviewer。
i.setDataAndType(Uri.fromFile(file), "image/*");
有没有办法让Android打开正确的应用程序,而不是手动设置从文件扩展名判断的类型?
答案 0 :(得分:2)
你可以这样做:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.fromFile(file));
intent.setType(FileHelper.getMimeType(file));
startActivity(intent);
以下是我的助手类(的相关部分)从文件中获取mimeType 。
关键是使用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());
}
}
希望这有帮助。
答案 1 :(得分:1)
这取决于其他应用程序。如果他们设置了他们的意图过滤器,包括mime信息,文件扩展名信息或两者。因此,我的建议是您不能依赖其他应用程序,因此最佳选择是在启动intent时提供尽可能多的信息,包括MIME类型。