gpt4 book ai didi

angularjs - 如何在 Angular/Ionic 服务中使用自定义 Cordova 插件方法

转载 作者:行者123 更新时间:2023-12-04 06:45:13 26 4
gpt4 key购买 nike

我正在将自定义 Cordova 插件集成到 Ionic 应用程序中。我们让第 3 方创建了一个 Cordova 插件来连接蓝牙设备。运行cordova platform ls显示插件已正确安装:

$ cordova plugin ls
> com.sitename.product 0.0.0 "DeviceProbe"

该插件包含一个 probe.js包含连接、读取、轮询和其他操作的方法的文件。

/plugins/com.sitename.product/www/probe.js
var callNative = function(service, action, success, error, args) {
if(args === undefined) args = [];
cordova.exec(success, error, service, action, args);
};

var thermProbe = {

// Methods here

};

module.exports = thermProbe;

为了在我们的 Controller 中使用插件,我需要创建一个 Angular 服务包装器,如 described here .

我创建了一个工厂来处理这个问题。

/lib/probe/probe.js
(function() {

'use strict';

var serviceId = 'Probe';
angular.module('thermProbe').factory(serviceId, ['$q', Probe]);

function Probe($q) {

var service = {
'connect': connect,
'disconnect': disconnect,
'getReading': getReading,
'getName': getName,
'getHigh': getHigh,
'getLow': getLow,
'pollReading': pollReading,
'stopPolling': stopPolling,
'isPolling': isPolling
};

return service;

// Method wrappers

function connect() {

var q = $q.defer();

if($window.cordova){
cordova.plugins.thermProbe.connect(function (result) {
q.resolve(result);
}, function (err) {
q.reject(err);
});
}
return q.promise;

}

}

})();

注入(inject) Probe服务到 Controller 工作正常。当我在我的设备上运行它时(使用 ionic run android ),我收到以下错误:
TypeError: Cannot read property 'connect' of undefined

回溯到包含 cordova.plugins.thermProbe.connect() 的行.

我也试过使用 cordova.plugins.probe.connect()但收到同样的错误。

如何从 /plugins/com.sitename.product/www/probe.js 获取方法在 /lib/probe/probe.js 工作?

最佳答案

经过多次试验和错误(和 console.log ing),我能够解决这个问题。
$window对象有 probe包含所有需要的方法的对象。我猜 probe名称来自 Cordova 插件配置。

插件.xml

<js-module src="www/probe.js" name="probe">
<clobbers target="probe" />
</js-module>
<platform name="ios">
<config-file target="config.xml" parent="/*">
<feature name="probe">
<param name="ios-package" value="productName"/>
</feature>
</config-file>
...
...
</platform>
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="probe">
<param name="android-package" value="com.sitename.productName"/>
<param name="onload" value="true" />
</feature>
</config-file>
...
...
</platform>

要使用这些方法:
function connect() {

var q = $q.defer();

if($window.probe){
$window.probe.connect(function (result) {
q.resolve(result);
}, function (err) {
q.reject(err);
});
}

return q.promise;

}

关于angularjs - 如何在 Angular/Ionic 服务中使用自定义 Cordova 插件方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31419195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com