我写了一个非常简单的插件,该插件可以从android设备获取所有消息并将其打包以进行响应。当我使用npm install ionic-capacitor-sms-access
并尝试访问消息时,仅调用web方法,而不是android方法。所以有人无法在这里帮助我并告诉我出了什么问题吗?
这是我的插件https://www.npmjs.com/package/ionic-capacitor-sms-access
(注意:仅android文件夹)
答案 0 :(得分:1)
它有效,有两种方法可以实现。
您需要做的只是继续遵循该教程的“自定义JavaScript”部分,其中的示例演示了如何在ionic / typescripts代码中使用插件。
例如:
import { Plugins } from '@capacitor/core';
const { SuperGreatPlugin } = Plugins;
export class CustomSuperPlugin {
constructor() {
}
customAwesomeness() {
SuperGreatPlugin.awesome();
}
}
注意:
您还可以从发布的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