【问题标题】:open local pdf file Android打开本地pdf文件Android
【发布时间】:2023-04-02 08:01:01
【问题描述】:

我正在将 pdf 文件下载到“下载”文件夹以供查看。对于 iOS 和 Win32,这很容易,因为 TWebBrowser 可以很好地处理 pdf 文件。我的问题是安卓。以下是我的代码:

if (FileExists(LFileName))    // pdf file is there
{
 #if defined(_PLAT_IOS) || defined(_PLAT_MSWINDOWS)
  Form1->WebBrowser1->URL = "file://" + LFileName;
  Form1->WebBrowser1->Visible = true;
 #endif

 #if defined(_PLAT_ANDROID)
  Androidapi::Jni::Graphicscontentviewtext::_di_JIntent intent = 
  TJIntent::Create();
  intent->setDataAndType(StringToJString("file://" + System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), LFileName)), StringToJString(L"application/pdf"));
  intent->setAction(TJIntent::JavaClass->ACTION_VIEW);
  if (SharedActivity()->getPackageManager()->queryIntentActivities(intent, TJPackageManager::JavaClass->MATCH_DEFAULT_ONLY)->size() > 0) {
   SharedActivity()->startActivity(intent);
  } else {
   ShowMessage("PDF viewer not found");
  }
 #endif
}

当我在 Android 上运行它时,它会打开 Adob​​e PDF 查看器,但不会打开文件。

我猜我没有正确传递 pdf 文件名。有什么想法吗?

编辑:好的,file:// 的使用已被弃用,看起来唯一的方法是通过 FileProvider - 根据this SE question。对于我这个级别的人来说,艰难的道路是数英里。我只想显示一个 pdf。

谢谢, 罗斯

【问题讨论】:

  • 我在这上面花了 3-4 天,这看起来就像一场真正的噩梦。我在 Android 组上看到的解决方案适用于 Api 10,但失败 >=10。我们真的需要一个在 Android 上显示 pdf 文件的 FMX 控件(就像 iOS 上的 TWebBrowser 一样)。

标签: firemonkey c++builder c++builder-10.3-rio


【解决方案1】:

我明白了!戴夫的帮助with thisdelphi 问题让我克服了困难。这是我的代码:

 _di_JIntent MyIntent;
 _di_Jnet_Uri Uri;
 UnicodeString URLtest;
 URLtest = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), "sample.pdf");
 Uri = TAndroidHelper::JFileToJURI(TJFile::JavaClass->init(StringToJString(URLtest)));
 MyIntent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW);
 MyIntent->setData(Uri);
 MyIntent->addFlags(TJIntent::JavaClass->FLAG_GRANT_READ_URI_PERMISSION);
 TAndroidHelper::Activity->startActivity(MyIntent);

注意,我必须确保 Secure File Sharing 在 Project->Options->Application->Entitlement List 下为真,并且我必须确保我的应用程序 had access 到设备存储。很开心的一天……

此外,这里是相同的代码,但在最后进行检查以确保有一个应用程序可以实际显示 pdf:

_di_JIntent MyIntent;
_di_Jnet_Uri Uri;
 UnicodeString URLtest;
 URLtest = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), "2009_FDA_paper.pdf");
 Uri = TAndroidHelper::JFileToJURI(TJFile::JavaClass->init(StringToJString(URLtest)));
 MyIntent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW);
 MyIntent->setData(Uri);
 MyIntent->addFlags(TJIntent::JavaClass->FLAG_GRANT_READ_URI_PERMISSION);
 //TAndroidHelper::Activity->startActivity(MyIntent);
 SharedActivity()->startActivity(MyIntent);
 if (SharedActivity()->getPackageManager()->queryIntentActivities(MyIntent, TJPackageManager::JavaClass->MATCH_DEFAULT_ONLY)->size() > 0) {
   SharedActivity()->startActivity(MyIntent);
 } else {
    ShowMessage("PDF viewer app not found.");
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 2012-07-21
    • 2011-08-22
    • 2013-07-01
    • 2015-10-18
    相关资源
    最近更新 更多