[英]Open file on Android with QML (Qt.openUrlExternally())
我想在Android上使用QML打開一個文件( .xls 、 .pdf 、 .png等)(如果iOS工作得更好)。
我正在嘗試像這樣使用它:
Qt.openUrlExternally(url)
/*Qt.openUrlExternally("http://www.example.com)"*/
/*Qt.openUrlExternally("file:///C:/Users/Hello/Pictures/Qt.jpg")*/
Inte.net URL和本地 URL都在Windows上完美打開。 Inte.net URL也適用於Android ,但是我無法在Android上打開本地文件。
這是我在 Android 上試過的:
Qt.openUrlExternally("file:/storage/emulated/0/Documents/test_pdf.pdf")
Qt.openUrlExternally("file:///storage/emulated/0/Documents/test_pdf.pdf")
Qt.openUrlExternally(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/test_pdf.pdf")
Qt.openUrlExternally("content:///storage/emulated/0/Documents/test_pdf.pdf");
我知道這里有幾個關於這個的問題,但沒有人回答我,而且這個例子也沒有顯示如何打開本地文件。
順便說一句,我有存儲權限,文件肯定在那里。
編輯:如果我通過QMLs fileDilog選擇文件,這是我得到的URL :content://com.android.externalstorage.documents/document/primary%3ADocuments/%2F20BLOQUES.pdf
這是由於 Android 操作系統的限制。
您可以通過在應用程序的 Java 部分中使用以下代碼來禁用此限制(順便說一句,它也可以使用 C++ 編寫):
import java.lang.reflect.Method;
import android.os.StrictMode;
import android.os.Build;
if (Build.VERSION.SDK_INT >= 24)
{
try
{
Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
m.invoke(null);
}catch(Exception e)
{
e.printStackTrace();
}
}
但是,谷歌不推薦,推薦的文件打開方式是使用content
方案。 您可以在此處詳細了解此內容: https://www.qt.io/blog/2017/12/01/sharing-files-android-ios-qt-app 。
因此,在與此抗爭之后,我得出了下一個結論和澄清:
我不能使用JAVA或C++ 。 我只能使用QML 。 這是一個名為Velneo的封閉軟件平台,我只能訪問QML端。
我不能使用file:/// ,它必須是content:/// 。 您可以在此處閱讀更多相關信息。
Android不會通過鍵入該路徑從/storage/emulated/0/Documents/打開文件。 URL 的格式必須如下所示: content://com.android.externalstorage.documents/document/primary%3ADocuments%2Ftest_pdf.pdf (閱讀#2) 。
它僅適用於Android 11 ,出於某種原因不適用於Android 10 。
我會接受這個作為正確答案只是因為在我的情況下這是我需要的,我可以滿足我的要求。
只是發布此回復以防萬一有人有一天會發現自己在同一個 position 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.