离子电容器插件不适用于Android

时间:2019-09-22 08:31:19

标签: android ionic4 capacitor

我写了一个非常简单的插件,该插件可以从android设备获取所有消息并将其打包以进行响应。当我使用npm install ionic-capacitor-sms-access并尝试访问消息时,仅调用web方法,而不是android方法。所以有人无法在这里帮助我并告诉我出了什么问题吗? 这是我的插件https://www.npmjs.com/package/ionic-capacitor-sms-access

(注意:仅android文件夹)

2 个答案:

答案 0 :(得分:1)

它有效,有两种方法可以实现。

方法1(来自官方教程)

您需要做的只是继续遵循该教程的“自定义JavaScript”部分,其中的示例演示了如何在ionic / typescripts代码中使用插件。

例如:


import { Plugins } from '@capacitor/core';

const { SuperGreatPlugin } = Plugins;

export class CustomSuperPlugin {
  constructor() {
  }
  customAwesomeness() {
    SuperGreatPlugin.awesome();
  }
}

注意:

  1. 插件类的名称,即“ SuperGreatPlugin”必须与您的插件的Java类相同。

方法2(javascript方法)

您还可以从发布的npm包中导入插件。但是请注意所生成的definitions.ts的第一行,declare module "@capacitor/core"。这意味着您必须从特定的模块中找到您的插件,这里与其他插件用法一样是“插件”。

以下是方法2:

import { SuperGreatPlugin } from 'YOUR_PLUGIN_NPM_PACKAGE';

async pluginEcho() {
    await Plugins.SuperGreatPlugin.echo({value: 'bla bla bla'})
}

在离子页面中调用函数pluginEcho()。

答案 1 :(得分:1)

刚开始时,我真的很难区分Web和本机插件,但最终我知道它们是完全分开的。

我建议在web.ts文件中重命名导出的Web插件对象,并在名称中添加Web。对我来说,这也是必要的,以免出现编译错误。

TS2308: Module './definitions' has already exported a member named 'YourPlugin'. Consider explicitly re-exporting to resolve the ambiguity.

如果要使用Web插件,请导入并使用它,例如:

import { YourWebPlugin } from 'YOUR_PLUGIN_NPM_PACKAGE';

YourWebPlugin.callSomething();

如果要使用本机插件,请导入并使用它,例如:

import { Plugins } from '@capacitor/core';

const { YourPlugin } = Plugins;
YourPlugin.callSomething();

不要忘记将本机插件公开给使用自定义插件的android应用项目 https://capacitor.ionicframework.com/docs/plugins/android#export-to-capacitor