Phonegap蓝牙插件不起作用
Posted
技术标签:
【中文标题】Phonegap蓝牙插件不起作用【英文标题】:Phonegap bluetooth plugin not working 【发布时间】:2013-10-23 09:41:34 【问题描述】:第一次在这里发帖,如果这个问题被问错或有任何问题,我很抱歉。
我正在开发一个 phonegap 应用程序,我需要能够在平板电脑(在本例中为 android)和 Win CE PC 之间建立蓝牙连接。 目前我正在尝试让蓝牙部分在平板电脑上工作,我正在使用你可以在https://github.com/tanelih/phonegap-bluetooth-plugin找到的插件 目前我只是尝试启用和禁用设备上的蓝牙。
在我的 bluetoothpage.js 文件中,我使用以下方法
window.bluetooth.prototype.enable(bluetoothTestSucces(),bluetoothTestFail());
bluetoothTestSucces 和 bluetoothTestFail 函数只是显示一个警报,没有别的。 如果我正确理解 phonegap 插件的工作原理,这将在我的 bluetooth.js 文件中使用以下代码
Bluetooth.prototype.enable = function(onSuccess, onError)
exec(onSuccess, onError, "Bluetooth", "enable", []);
调用
private void enable(JSONArray args, CallbackContext callbackCtx)
try
_bluetooth.enable();
callbackCtx.success();
catch(Exception e)
this.error(callbackCtx, e.getMessage(), BluetoothError.ERR_UNKNOWN);
在我的 BluetoothPlugin.java 文件中。
如果java文件返回成功则使用bluetoothTestSucces(),如果java文件返回错误则使用bluetoothTestFail()。
但由于某种原因,它同时运行并且没有打开我设备上的蓝牙。 我几乎可以肯定我忘记了文件的链接或在某处链接错误。 但我已按照插件中包含的说明进行操作。
我已将蓝牙权限包含在我的应用程序根目录中的 AndoridManifest 文件中
我已将插件包含在我的 config.xml 文件中,该文件位于 res/xml 中
我在 deviceready 事件之后需要插件,如下所示
document.addEventListener("deviceready", onDeviceReady, false);
函数 onDeviceReady()
window.bluetooth = cordova.require("cordova/plugin/bluetooth");
谁能告诉我如何解决这个问题或我做错了什么?
更新 1
在最终能够使用 eclipse 进行一些调试之后 我收到以下错误:未捕获的类型错误:无法调用未定义的方法“启用”。
更新 2
我认为我调用了错误的方法,它应该是 window.bluetooth.enable 而不是 window.bluetooth.prototype.enable。 现在我收到以下错误;
带有标签“BluetoothAdapter”的“Bluetooth binder is null”
此外,当我在模拟器上运行它时,它只显示 bluetoothTestFail() 函数(它应该是这样的)但是当我在设备上运行它时没有任何反应,没有调用任何函数,也没有打开/关闭蓝牙
更新 3
我已经通过 eclipse 作为我设备上的应用程序运行了我的项目,现在它运行良好,没有问题。 但是当我使用 phonegap 将其转换为应用程序时,它不再工作了。
谢谢
马丁
PS:对于任何语言错误,我深表歉意,英语不是我的母语。
编辑:忘记包含一些代码
【问题讨论】:
【参考方案1】:您似乎正在通过prototype
调用该方法。如果您查看包含的 bluetooth.js
文件,您会发现包含以下内容的行:
var bluetooth = new Bluetooth();
module.exports = bluetooth;
这基本上意味着插件“导出”一个Bluetooth
的实例,您可以从中直接调用方法。
在您的帖子中,您说您也这样传递回调:
window.bluetooth.prototype.enable(bluetoothTestSucces(),bluetoothTestFail());
这意味着bluetoothTestSucces
和bluetoothTestFail
函数都被调用并且它们的返回值被传入。
尝试像这样调用方法,看看它是否有效。
window.bluetooth.enable(bluetoothTestSucces, bluetoothTestFail);
希望这会有所帮助!
编辑
很高兴听到您至少以某种方式使其正常工作。
我不确定您使用PhoneGap 将其转换为应用程序是什么意思?我自己只通过 eclipse 运行过 Android 项目,所以我不确定是什么导致了问题。
您可以尝试使用console.log
向bluetooth.js
文件添加一些基本调试,以查看是否调用了插件方法。您也可以对 Java 文件执行相同的操作,看看这是否有助于您找到罪魁祸首。
希望你能成功。
【讨论】:
感谢您的回复!在玩了一些测试功能后,我得出了同样的结论。现在我收到一条错误消息,提示“蓝牙绑定器为空”,当我在设备上运行它时,什么也没有发生,但在模拟器上我收到了 bluetoothTestFail 消息。以上是关于Phonegap蓝牙插件不起作用的主要内容,如果未能解决你的问题,请参考以下文章