首页 > 解决方案 > 使用默认应用程序 nativescript 7 打开文件

问题描述

我有一个应用程序,其中可以下载某些文档。这些文档以 base64 编码字符串的形式出现,我使用以下代码将其保存到设备中:

const binaryString = decode(base64Content);
const filePath = path.join(knownFolders.documents().path, filename);
const file = File.fromPath(filePath);

file.writeTextSync(
    binaryString,
    (err) => {
        console.log(err);
    },
    encoding.ISO_8859_1
);

保存此文件后,我希望能够在默认查看器中打开它(这些文件通常是pngpdf文件)。我尝试使用如下所示的意图来实现这一点:

if (isAndroid) {
    const context = Utils.ad.getApplicationContext();
    try {
        // Get mimeType
        const fsa = new FileSystemAccess();
        const mimeTypeMap = android.webkit.MimeTypeMap.getSingleton();
        const mimeType = mimeTypeMap.getMimeTypeFromExtension(
            fsa.getFileExtension(filepath).replace(".", "").toLowerCase()
        );

        // Create intent
        const intent = new android.content.Intent(android.content.Intent.ACTION_VIEW);
        intent.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
        // Get file Url
        const url = androidx.core.content.FileProvider.getUriForFile(
            context,
            context.getApplicationContext().getPackageName() + ".provider",
            new java.io.File(filepath)
        );
              
        // Set intent data
        intent.setDataAndType(url, mimeType);

        // Create chooser
        const chooser = android.content.Intent.createChooser(intent, "Open File...");
        chooser.addFlags(android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION);
        chooser.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);

        // Start activity
        context.startActivity(chooser);
    } catch (e) {
        console.log(e);
    }
}

这会在尝试打开文件时导致以下错误:

Error: java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.techairos.wtaapp/files/2581875 PL.pdf

我试过四处寻找帮助,但我所做的修复似乎都没有帮助。任何指向正确方向的指针将不胜感激!

标签: androidnativescriptangular-nativescript

解决方案


推荐阅读