CKHan
CKHan
  • 发布:2015-04-19 23:06
  • 更新:2019-07-31 17:10
  • 阅读:42347

Native.js如何访问蓝牙Bluetooth

分类:Native.js
            var main, Context, BluetoothManager, BluetoothAdapter, BManager, BAdapter;  
        document.addEventListener('plusready', function(){  
            main = plus.android.runtimeMainActivity();  
                        /*这是成功的*/  
            BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");  
            BAdapter = BluetoothAdapter.getDefaultAdapter();  
             /*这是成功的*/  

                          /*通过BluetoothManager这是失败的*/  
            /*Context = plus.android.importClass("android.content.Context");  
            BluetoothManager = plus.android.importClass("android.bluetooth.BluetoothManager");  
            BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);              
            BAdapter = BManager.getAdapter();*/  
                         /*通过BluetoothManager这是失败的*/  

            if(!BAdapter.isEnabled()) {  
                BAdapter.enable();  
            }         
        });

通过BluetoothManager获取bluetoothAdpter,返回的是[object object]JS对象,所以运行到BAdapter.isEnabled()会提示不存在该方法。
本人想尝试蓝牙ble的开发

2015-04-19 23:06 2 条评论 负责人:无 分享
已邀请:

最佳回复

Android_磊子

Android_磊子

更新:5+已提供蓝牙,参考http://www.html5plus.org/doc/zh_cn/bluetooth.html 注意需要最新版HBuilderX

需要对你的代码进行修正如下:
main = plus.android.runtimeMainActivity();
Context = plus.android.importClass("android.content.Context");
BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
plus.android.importClass(BManager);//引入相关的method函数
BAdapter = BManager.getAdapter();
plus.android.importClass(BAdapter);//引入相关的method函数,这样之后才会有isEnabled函数支持
if(!BAdapter.isEnabled()) {
BAdapter.enable();
}

同时建议,由于BluetoothManager.getAdapter()属于level18版本,在18以下版本肯定是不能使用的。还请使用BluetoothAdapter.getDefaultAdapter() 方式实现。

  • wujianfeng

    暂时蓝牙这块只能安卓这么用,IOS还没解决方案吧?

    2016-03-18 10:17

  • Android_磊子

    @697

    2016-03-18 11:21

  • 1***@163.com

    没拿到, 数据是空的, 会什么原因呢

    2019-03-05 16:15

  • 6***@qq.com

    如何在弹出的 弹框 中 监听两个 按钮的默认 行为 拒绝的默认行为 系统把这个权限改为禁止了 怎么变成询问 或只是隐藏这个dialog 不操作

    2019-08-01 11:14

hum

hum

以上都是android的写法,有没有苹果的写法?

CKHan

CKHan (作者)

...我从离线打包的文档中貌似发现了什么:
Android离线打包

App离线打包
预备环境
Android开发环境,推荐使用ADT开发工具;
并要求安装Android4.0(API 14)SDK。

难道HBuilder或者说Native.js是以Android4.0为标准开发的吗?而android是从4.3(API 18)才开始正式支持BLE的,所以导致我所说的情况?而要解决我的问题,是否需要 更新Native.js呢?

CKHan

CKHan (作者)

不更新Native.JS话,是否可以通过开发 插件 的方式解决?

Android_磊子

Android_磊子

isEnabled 在level 5就有了,在5+平台应该不会有问题。
目前我测试华为4.4、小米5.0、联想4.1均可以正常执行并且打开蓝牙。
还请检查是否有权限管理软件禁止了。同时使用其他手机测试。

CKHan

CKHan (作者)

@DCloud_Android_磊子

            main = plus.android.runtimeMainActivity();  
            BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");  
            BAdapter = BluetoothAdapter.getDefaultAdapter();  
            if(!BAdapter.isEnabled()) {  
                BAdapter.enable();  
            }

以上方式是没问题的,可以正常打开蓝牙

           main = plus.android.runtimeMainActivity();  
           Context = plus.android.importClass("android.content.Context");  
            BluetoothManager = plus.android.importClass("android.bluetooth.BluetoothManager");  
            BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);              
            BAdapter = BManager.getAdapter();  
            if(!BAdapter.isEnabled()) {  
                BAdapter.enable();  
            }

通过BluetoothManager获取BluetoothAdapter返回的是[object object]JS对象,所以运行到BAdapter.isEnabled()会提示不存在该方法

您是可以通过通过BluetoothManager正常获取到BluetoothAdapter吗?

  • Jayming1024

    怎么获得已配对的远程蓝牙设备的集合呢?

    2015-07-15 11:24

CKHan

CKHan (作者)

@DCloud_Android_磊子
谢谢,通过引入相关方法后可以成功执行了~,因为我现在尝试的是蓝牙BLE的开发,所以必须大于等于18的版本才可以用。我还想了解多一些,因为我看你们的文档里,好像并没有提及还要这样引入的,只是像原生一样导入相关类就可以了,是不是遇到类似情况都要这样处理呢?

  • Android_磊子

    主要BManager.getAdapter()这样得到的是BluetoothAdapter类的对象,这个类的还没有引入,不值能使用'.'操作符使用内部函数,需要importClass,当然也可通过plus.android.invoke方式调用。

    2015-04-20 13:57

Liuliumoto

Liuliumoto - 遛遛摩托

您好,我做了蓝牙打开和关闭都是OK的,但是扫描貌似有问题,您有写过没,能否一起沟通下,我是菜鸟。

上网找了Android的蓝牙开发,有方法可以实现,但是在使用NJS翻译的时候遇到了问题,如下链接:
蓝牙开发

private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
System.out.println(device.getName());
}
}
}

这个如何使用NJS进行翻译呢?

  • CKHan (作者)

    ...这个我也不会啊,这种写法还是要问问官方的大牛吧,文档上也没说,我现在是写了一个插件测试的。

    2015-05-27 00:00

Jayming1024

Jayming1024

怎么获得已配对的远程蓝牙设备的集合呢?

熊猫仙

熊猫仙

请问,关于插件的编写有模板和说明吗?

  • Android_磊子

    这里是开发示例。http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/159

    2016-03-29 10:48

m***@qq.com

m***@qq.com

以上都是android的写法,有没有苹果的写法?

针眼画师

针眼画师

同问苹果的写法,该怎么做?

Apple小赞

Apple小赞

这难道不需要申请蓝牙权限吗?

6***@qq.com

6***@qq.com

如何提示 "此应用需要使用蓝牙功能" ?

该问题目前已经被锁定, 无法添加新回复