gpt4 book ai didi

android - 使用 Polaris office 5 从外部打开 PDF 返回 "This document cannot be opened"

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:24 26 4
gpt4 key购买 nike

过去几个小时我们一直在努力解决这个问题,最后决定我们应该恢复到 StackOverflow。

这里是——我们有一个应用程序,它从服务器下载一个 PDF 文件到应用程序的缓存目录,然后使用数据包管理器打开它。当然,它会通过 grantUriPermission() 授予对所有可用包的读取(和写入)权限。

虽然它在大多数设备上运行良好,但今天我们遇到了一台安装了 POLARIS Office 5 作为默认 PDF 查看器的设备。

每当我们打开文件时,Polaris 只会显示一条消息“无法打开此文档”。

我应该说,当尝试通过 Acrobat Reader 打开文件时,效果很好。此外,当我们将文件从缓存目录复制到外部目录(使用 Android 的文件管理器),然后在 Polaris 中手动打开它时,效果很好。

我们本来会放弃的,但由于 Polaris 是许多设备上的默认查看器,我们真的很想解决这个问题。

这是代码-

    public void onDownloadDone(String filepath) {
// Set a file object that represents the downloaded file
File file = new File(filepath);
// Set an intent for the external app
Intent intent = new Intent(Intent.ACTION_VIEW);
// Get mime type of the downloaded file
String fileExtension = MimeTypeMap.getFileExtensionFromUrl(filepath);
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);
intent.setType(mimeType);

// Look for installed packges according to the file's mime type
PackageManager pm = context.getPackageManager();

Uri contentUri = FileProvider.getUriForFile(context, "myapp.fileprovider", file);
// Set the file uri in the intent
intent.setData(contentUri);

// Give permissions to the file to each external app that can open the file
List<ResolveInfo> activities = pm.queryIntentActivities(intent, 0);
for (ResolveInfo externalApp: activities){
String packageName = externalApp.activityInfo.packageName;
context.grantUriPermission(packageName, contentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}

// Start the activities (or launch the menu) if any activity exists
if (activities.size() > 0){
context.startActivity(intent);
} else {
System.out.println("Warning!!! No app for file " + filepath);
}

}

非常感谢!

最佳答案

我遇到了完全相同的问题。 PDF 文件可以用 ezPDFAdobe 打开,但不能用 Polaris Viewer 打开。您必须设置数据和类型:

intent.setDataAndType(uri, "application/pdf");

而不是使用:

intent.setType("application/pdf");
intent.setData(uri);

对我来说,以下内容现在可以与 Polaris 一起正常工作:

Uri uri = FileProvider.getUriForFile(MyApplication.getContext(), MyApplication.getContext().getPackageName() + ".myfileprovider", destFile);

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "application/pdf");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);

关于android - 使用 Polaris office 5 从外部打开 PDF 返回 "This document cannot be opened",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21662967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com