我的要求是在我的应用中下载并查看Excel,Doc文件。所以我在手机存储中下载了Excel / Doc文件,并通过传递文件路径调用了ACTION_VIEW Intent。然后我收到此错误,说“尝试将文件保存在设备上,然后打开它。”
如果有人可以建议我打开excel或doc文件,我会很高兴。请大家为此我搜索了很多,到目前为止我没有找到解决方案,我确信我已经使用了正确的打开文件的意图。
我的代码:
(1,List(1c, 1b, 1a))
(2,List(2b, 2a))
(3,List(3c, 3b, 3a))
(4,List(4a))
(5,List(5c, 5b, 5a))
(6,List(6b, 6a))
(7,List(7a))
(8,List(8b, 8a))
(9,List(9a))
答案 0 :(得分:1)
您需要标志FLAG_ACTIVITY_NO_HISTORY,FLAG_GRANT_READ_URI_PERMISSION,FLAG_GRANT_WRITE_URI_PERMISSION。
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
答案 1 :(得分:0)
我遇到了同样的问题,我修好了。问题很可能与您的ContentProvider / FileProvider实现有关。我的Excel表格在Google表格中打开正常,但我在MS Excel中收到此错误。解决方法是从提供程序返回正确的内容类型(通过getType()方法)。返回错误的内容类型将导致错误。
尝试使用此代码来查看它是否有用......如果有,您可以完全实现所有类型文件的例程。
@Override
public String getType(Uri uri) {
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
}
祝你好运!
答案 2 :(得分:0)
尝试从文件中获取mime类型
public String getMimeTypeByFile(String filePath) {
MimeTypeMap type = MimeTypeMap.getSingleton();
return type.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(filePath));
}
答案 3 :(得分:0)
最后我没有意向打开Doc,PPT,Excel文件,我找到了更好的解决方案,请在此处检查代码
if(fileType.equalsIgnoreCase("doc") || fileType.equalsIgnoreCase("docx")) {
String str = "com.microsoft.office.word";
Uri pathe = Uri.fromFile(fileN);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(pathe, "application/msword");
PackageManager packageManager = activity.getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
activity.startActivity(intent.createChooser(intent, "Choose app to open document"));
}
else
{
//Launch PlayStore
try {
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id="+str)));
} catch (android.content.ActivityNotFoundException n) {
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id="+str)));
}
}