Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-与蓝牙子系统(BlueZ)通信_Android_Android Ndk_Bluetooth_Core Bluetooth - Fatal编程技术网

Android-与蓝牙子系统(BlueZ)通信

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时遇到了麻烦。 虽然我通过我的应用程序终止了执行的进程,但还是遇到了问题 因此,我想找到一种从

我正在寻找一种从我的Android智能手机(HTC Desire with Android 4.0.1)定期进行蓝牙查询的方法。该设备是根设备,它是一个自定义Rom安装,使我有充分的特权。 我已经编写了一个shell脚本,它使用hcitool、hciconfig和hcidump进行查询。到目前为止效果不错,但对我来说有点慢。我想这是因为我在使用android应用程序从linux执行shellscript时遇到了麻烦。 虽然我通过我的应用程序终止了执行的进程,但还是遇到了问题

因此,我想找到一种从Android API查询BT设备的方法。 我发现直到现在才有可能做到这一点,但我读到了bluez API,它可能能够满足我的要求。 有人给我任何链接、提示或建议吗

我没有发现任何有用的东西:/

提前谢谢


编辑(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);
关闭(袜子);
谢谢你的帮助