我想在 Android 上使用 QML 打開一個檔案(.xls 、.pdf 、 .png等)(如果iOS作業得更好)。
我正在嘗試像這樣使用它:
Qt.openUrlExternally(url)
/*Qt.openUrlExternally("http://www.example.com)"*/
/*Qt.openUrlExternally("file:///C:/Users/Hello/Pictures/Qt.jpg")*/
Internet URL和本地 URL都可以在Windows上完美打開。Internet 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:Documents//20BLOQUES.pdf
uj5u.com熱心網友回復:
這是由于安卓作業系統的限制。
您可以通過在應用程式的 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();
}
}
但是,Google 不建議這樣做,推薦的檔案打開方式是使用content方案。您可以在此處更詳細地了解此內容:https ://www.qt.io/blog/2017/12/01/sharing-files-android-ios-qt-app 。
uj5u.com熱心網友回復:
所以,在與這個斗爭之后,我得到了下一個結論和澄清:
我不能使用JAVA或C 。我只能使用QML。這是一個名為Velneo的封閉軟體平臺,我只能訪問QML端。
我不能使用file:///,它必須是content:///。您可以在此處閱讀有關此內容的更多資訊。
Android不會通過鍵入該路徑從/storage/emulated/0/Documents/打開檔案。URL 的格式必須如下:content://com.android.externalstorage.documents/document/primary:Documents/test_pdf.pdf (read #2)。
它僅適用于Android 11 ,由于某種原因它不適用于Android 10 。
我會接受這是正確的答案,因為在我的情況下,這是我需要的,我可以滿足我的要求。
只是發布此回復,以防有人有一天會發現自己處于相同的位置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/457877.html
