首页 > 解决方案 > 为什么我不能在cordova cusotm插件中调用导入的android平台api类的Java方法

问题描述

我正在使用 Ionic 创建一个应用程序,为了加载与 Play Asset Delivery 一起使用的资产,我需要通过创建一个 cordova 插件来访问 android 本机代码。我需要添加那三行代码。为了实现这一点,我导入了包含这些方法和类的 Android 平台 API。

插件 Java 文件:

package cordova.plugin.hello;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

//My Imports
import android.content.res.AssetManager;
import android.content.Context;
import java.io.InputStream; 

public class hello extends CordovaPlugin {
    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        Context context = createPackageContext("io.ionic.starter", 0);
        AssetManager assetManager = context.getAssets();
        InputStream is = assetManager.open("pack1");
    }
}

构建应用程序时出现此错误:

> Task :app:compileDebugJavaWithJavac FAILED
C:\Users\LUM\appAsset\platforms\android\app\src\main\java\cordova\plugin\hello\hello\hello.java:22: error: cannot find symbol
        Context context = createPackageContext("io.ionic.starter", 0);
                          ^
  symbol:   method createPackageContext(String,int)
  location: class hello
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error

我对应用程序开发非常陌生,我在 Internet 上找到的所有可能的解决方案都会产生不同的错误,并且在远离您可以在第一篇链接文章中看到的三行代码的同时。例如添加this.cordova.getActivity()并调用createPackageContext("io.ionic.starter", 0);它。这造成了更多的错误。与其他修复尝试相同。

我知道即使在修复其他错误之后出现错误也是正常的,但如果你能帮助我解决我在代码中根本做错的事情,那真的会帮助我。

Android SDK Tools : 26.1.1
NodeJS            : v12.18.3
npm               : 6.14.6
OS                : Windows 10
Gradle            : 6.6.1
Ionic Framework   : @ionic/angular 5.3.3
Cordova Platforms : android 9.0.0

标签: javacordovacordova-plugins

解决方案


@Stultuske是对的 -createPackageContext()是类的实例方法,android.content.Context因此您需要在现有的类实例上调用它。您可以使用应用程序上下文实例;尝试这个:

Context context = this.cordova
        .getActivity()
        .getApplicationContext()
        .createPackageContext("io.ionic.starter", 0);

推荐阅读