打开本地 pdf 文件 Android
open local pdf file Android
我正在将 pdf 文件下载到“下载”文件夹中进行查看。对于 iOS 和 Win32 这很容易,因为 TWebBrowser
可以很好地处理 pdf 文件。我的问题是 Android。下面是我的代码:
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 上时,它会打开 Adobe PDF 查看器但不会打开文件。
我猜我没有正确传递 pdf 文件名。有什么想法吗?
编辑:好的,file://
的使用已被弃用,看起来唯一的方法是通过 FileProvider - 根据 。对于我这个级别的人来说,艰难的道路数英里。我只想显示一个pdf。
谢谢,
俄罗斯人
我知道了! Dave 的帮助 with this delphi 问题让我渡过了难关。这是我的代码:
_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
在项目->选项->应用程序->授权列表下是正确的,并且我必须确保我的应用程序 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.");
}
我正在将 pdf 文件下载到“下载”文件夹中进行查看。对于 iOS 和 Win32 这很容易,因为 TWebBrowser
可以很好地处理 pdf 文件。我的问题是 Android。下面是我的代码:
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 上时,它会打开 Adobe PDF 查看器但不会打开文件。
我猜我没有正确传递 pdf 文件名。有什么想法吗?
编辑:好的,file://
的使用已被弃用,看起来唯一的方法是通过 FileProvider - 根据
谢谢, 俄罗斯人
我知道了! Dave 的帮助 with this delphi 问题让我渡过了难关。这是我的代码:
_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
在项目->选项->应用程序->授权列表下是正确的,并且我必须确保我的应用程序 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.");
}