我正在努力将自定义Cordova插件集成到Ionic应用程序中 . 我们有第三方创建了一个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;
为了在我们的控制器中使用插件,我需要创建一个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;
}
}
})();
将 Probe
服务注入控制器工作正常 . 当我在我的设备上运行它(使用 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
中工作?
1 回答
经过多次试验和错误(和
console.log
)我能够解决这个问题 .$window
对象具有包含所有必需方法的probe
对象 . 我猜probe
名称来自Cordova插件配置 .plugin.xml
要使用这些方法: