如何使用NS 6.0下载和打开文件

时间:2019-07-19 16:15:58

标签: nativescript androidx

我已经迁移到 NativeScript 6.0 ,并且需要一些有关如何使用 Downloads 文件夹中的Android支持库(AndroidX)下载和打开文件的帮助。

实际上,在NS 5.x中,我使用了来自Android支持库(android.support.v4.content.FileProvider)的 FileProvider ,并且效果很好。迁移后,使用(androidx.core.content.FileProvider),打开应用程序时出现错误。

但是在Android文档中,我找不到任何方法或信息来迁移代码以进行本机下载和打开(下载文件夹)。


上一个方法:

  private openFile(fileName: string, mimeType: string, extension: string) {
    try {
      if (isAndroid) {
        const intent = new android.content.Intent(android.content.Intent.ACTION_VIEW);
        const context = applicationModule.android.context;
        console.log("android.ctx=", context);

        const nativeFile = new java.io.File(fileName);
        console.log("nativeFile=", nativeFile);

        const uri = android.support.v4.content.FileProvider.getUriForFile(context, "com.otisw.gescon.app.provider", nativeFile);

        intent.setDataAndType(uri, mimeType);
        intent.addFlags(android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION);

        const choosedIntent = android.content.Intent.createChooser(intent, "Open file...");
        console.log("choosedIntent=>", choosedIntent);
        context.startActivity(choosedIntent);
      } else {
        // const documents = fs.knownFolders.currentApp();
        // const file = this.documents.getFile(fileName);
        const open = utils.ios.openFile(fileName);
      }
    } catch (e) {
      console.log(e);
    }
  }

尝试:

  private openFile(fileName: string, mimeType: string, extension: string) {
    try {
      if (isAndroid) {
                const intent = androidx.core.content.IntentCompat.makeMainSelectorActivity(
                    "android.content.Intent.ACTION_VIEW",
                    "??"
                );

文件参考。d.ts:

/// <reference path="./node_modules/tns-core-modules/tns-core-modules.d.ts" />

/// <reference path="./node_modules/tns-platform-declarations/ios.d.ts" />
/// <reference path="./node_modules/tns-platform-declarations/android/androidx-26.d.ts" />

有人会尝试将“下载并打开”的代码从NativeScript升级到新的AndroidX还是知道解决方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须在AndoridX上使用androidx.core.content.FileProvider,在较低版本中使用android.support.v4.content.FileProvider

  

随着Android 9.0(API级别28)的发布,出现了一个新版本   支持库AndroidX的一部分,它是Jetpack的一部分。的   AndroidX库包含现有的支持库以及   包括最新的Jetpack组件。

     

您可以继续使用支持库。历史文物   (那些版本为27或更早版本,并打包为android.support。*)   仍可在Google Maven上使用。但是,所有新图书馆   开发将在AndroidX库中进行。

     

我们建议在所有新项目中使用AndroidX库。您   还应该考虑将现有项目迁移到AndroidX。