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());

这意味着bluetoothTestSuccesbluetoothTestFail 函数都被调用并且它们的返回值被传入。

尝试像这样调用方法,看看它是否有效。

window.bluetooth.enable(bluetoothTestSucces, bluetoothTestFail);

希望这会有所帮助!

编辑

很高兴听到您至少以某种方式使其正常工作。

我不确定您使用PhoneGap 将其转换为应用程序是什么意思?我自己只通过 eclipse 运行过 Android 项目,所以我不确定是什么导致了问题。

您可以尝试使用console.logbluetooth.js 文件添加一些基本调试,以查看是否调用了插件方法。您也可以对 Java 文件执行相同的操作,看看这是否有助于您找到罪魁祸首。

希望你能成功。

【讨论】:

感谢您的回复!在玩了一些测试功能后,我得出了同样的结论。现在我收到一条错误消息,提示“蓝牙绑定器为空”,当我在设备上运行它时,什么也没有发生,但在模拟器上我收到了 bluetoothTestFail 消息。

以上是关于Phonegap蓝牙插件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

PhoneGap 构建插件不起作用

PhoneGap 的通知插件不起作用

Phonegap GPS 插件不起作用

PhoneGap BarcodeScanner 插件不起作用

PhoneGap MediaCapture 插件不起作用

phonegap 插件barcodescanner 在iOS 上不起作用