android - 通过 NodeJS 和 Termux 与 Android 蓝牙设备通信

标签 android node.js linux bluetooth virtual-machine

我们正在寻求与连接到 Android 平板电脑的蓝牙设备进行通信。我们正在使用 Termux 并安装了 NodeJS。有谁知道是否可以与蓝牙设备进行通信?我们是否必须尝试直接通过/dev 文件夹与设备通信?

据我了解,Android 是构建在 Linux 内核之上的,但是,它在其之上实现了特定的东西来与其他东西进行交互,例如连接性。甚至可以通过 NodejS“serialport”或其他工具通过/dev 文件夹访问该设备吗?

作为最后的手段,如果无法做到这一点,我想我们可以尝试通过 root 终端在 Android 操作系统中构建 NodeJS。我听说这并不像人们想象的那么容易。通过 Termux,我可以访问/dev 文件夹并查看所有设备。不确定该权限将如何工作。谢谢。

enter image description here

最佳答案

您可以使用此工具通过串行端口进行通信。我从来没有使用过这个工具,只是提供它作为引用,因为 android 是建立在 linux 内核上的,这可能会起作用。请注意,示例与文档相同。

https://github.com/eelcocramer/node-bluetooth-serial-port

基本客户端使用

var btSerial = new (require('bluetooth-serial-port')).BluetoothSerialPort();

btSerial.on('found', function(address, name) {
    btSerial.findSerialPortChannel(address, function(channel) {
        btSerial.connect(address, channel, function() {
            console.log('connected');

            btSerial.write(new Buffer('my data', 'utf-8'), function(err, bytesWritten) {
                if (err) console.log(err);
            });

            btSerial.on('data', function(buffer) {
                console.log(buffer.toString('utf-8'));
            });
        }, function () {
            console.log('cannot connect');
        });

        // close the connection when you're ready
        btSerial.close();
    }, function() {
        console.log('found nothing');
    });
});

btSerial.inquire();

基本服务器使用(仅限 Linux)

var server = new(require('bluetooth-serial-port')).BluetoothSerialPortServer();

var CHANNEL = 10; // My service channel. Defaults to 1 if omitted.
var UUID = '38e851bc-7144-44b4-9cd8-80549c6f2912'; // My own service UUID. Defaults to '1101' if omitted

server.listen(function (clientAddress) {
    console.log('Client: ' + clientAddress + ' connected!');
    server.on('data', function(buffer) {
        console.log('Received data from client: ' + buffer);

        // ...

        console.log('Sending data to the client');
        server.write(new Buffer('...'), function (err, bytesWritten) {
            if (err) {
                console.log('Error!');
            } else {
                console.log('Send ' + bytesWritten + ' to the client!');
            }
        });
    });
}, function(error){
    console.error("Something wrong happened!:" + error);
}, {uuid: UUID, channel: CHANNEL} );

关于android - 通过 NodeJS 和 Termux 与 Android 蓝牙设备通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43033909/

相关文章:

使用套接字的 Android 点对点应用程序

android - 无法使用 adb shell setprop 在 Android 设备上更改时区

java - 是否可以删除 Android 自定义对话框的框架?

mysql - 将任意 mySQL 查询与 JugglingDB 一起使用?

linux - 我正在尝试通过 shell 脚本替换文件中的字符串,其中字符串的一部分是未知的

linux - 在离线机器上的 CentOS 7 上安装 redhat-lsb

android - 如何为我的移动应用程序选择平台以及如何将其发展为多个平台?

node.js - 如何强制使用命名空间前缀?

mysql - 如何在 mysql json 文档中已创建的对象中附加 JSON 对象

c - Linux串口编程c_cc字符配置