Android-与蓝牙子系统(BlueZ)通信
我正在寻找一种从我的Android智能手机(HTC Desire with Android 4.0.1)定期进行蓝牙查询的方法。该设备是根设备,它是一个自定义Rom安装,使我有充分的特权。 我已经编写了一个shell脚本,它使用hcitool、hciconfig和hcidump进行查询。到目前为止效果不错,但对我来说有点慢。我想这是因为我在使用android应用程序从linux执行shellscript时遇到了麻烦。 虽然我通过我的应用程序终止了执行的进程,但还是遇到了问题 因此,我想找到一种从Android API查询BT设备的方法。 我发现直到现在才有可能做到这一点,但我读到了bluez API,它可能能够满足我的要求。 有人给我任何链接、提示或建议吗 我没有发现任何有用的东西:/ 提前谢谢Android-与蓝牙子系统(BlueZ)通信,android,android-ndk,bluetooth,core-bluetooth,Android,Android Ndk,Bluetooth,Core Bluetooth,我正在寻找一种从我的Android智能手机(HTC Desire with Android 4.0.1)定期进行蓝牙查询的方法。该设备是根设备,它是一个自定义Rom安装,使我有充分的特权。 我已经编写了一个shell脚本,它使用hcitool、hciconfig和hcidump进行查询。到目前为止效果不错,但对我来说有点慢。我想这是因为我在使用android应用程序从linux执行shellscript时遇到了麻烦。 虽然我通过我的应用程序终止了执行的进程,但还是遇到了问题 因此,我想找到一种从
编辑(2012-09-28): 好吧,我想我现在离解决方案有点近了。 我从以下网站下载了blueZ库的源代码: 然后,我将重要文件(hci.h、bluetooth.h、hcilib.h及其源文件)放入android项目的jni文件夹,并将它们编译到共享库中。 我围绕函数编写了一个JNI包装器
hci_inquiry(int dev_id, int len, int nrsp, const uint8_t *lap,inquiry_info **ii, long flags)
并按照书中的建议做了我的调查。在这里之前一切都很好
但当我开始查询时,函数
dev_id = hci_get_route(NULL);
总是返回-1,我无法继续
蓝牙已激活,我已尝试向我的应用程序授予root访问权限。不是更好:(
在这里之前我做错了什么?它不允许在android应用程序中使用BlueZ HCI命令吗?
我是说JBlueZ没有做任何其他事情,是吗
我的本机代码如下所示:
inquiry_info *ii = NULL;
int max_rsp, num_rsp;
int dev_id, sock, len, flags;
int i;
char addr[19] = { 0 };
char name[248] = { 0 };
dev_id = hci_get_route(NULL);
if (dev_id < 0 ) {
LOGI("ERROR ON finding Device ID");
return;
}
sock = hci_open_dev( dev_id );
if (sock < 0) {
LOGI("ERROR ON opening socket");
return;
}
len = 8;
max_rsp = 255;
flags = IREQ_CACHE_FLUSH;
ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));
num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);
//##################################################################################
LOGI("INQUIRY Executed!!!");
(*env)->CallVoidMethod(env, obj, callBackID, num_rsp);
free(ii);
close(sock);
查询信息*ii=NULL;
int max_rsp,num_rsp;
int dev_id、sock、len、flags;
int i;
char addr[19]={0};
字符名[248]={0};
dev_id=hci_get_路由(NULL);
if(dev_id<0){
LOGI(“查找设备ID时出错”);
返回;
}
sock=hci\u open\u dev(dev\u id);
if(sock<0){
LOGI(“打开插座时出错”);
返回;
}
len=8;
最大rsp=255;
flags=IREQ\u缓存\u刷新;
ii=(查询信息*)malloc(最大rsp*查询信息规模);
num_rsp=hci_查询(dev_id、len、max_rsp、NULL和ii、标志);
//##################################################################################
LOGI(“已执行查询!!!”;
(*env)->CallVoidMethod(env,obj,callBackID,num_rsp);
免费(ii);
关闭(袜子);
谢谢你的帮助