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

时间:2012-08-06 16:12:04

标签: android android-ndk bluetooth core-bluetooth

我正在寻找一种从我的Android智能手机(HTC Desire with Android 4.0.1)定期进行蓝牙查询的方法。设备已植根,并且是安装的自定义Rom,因此我具有完全权限。 我已经编写了一个shellcript,它使用hcitool,hciconfig和hcidump来进行查询。到目前为止工作正常,但对我来说这有点慢。我想这是因为我使用android-app从linux执行一个shellcript的肮脏的解决方法。 虽然我通过我的应用程序杀死已执行的进程而遇到问题。

所以我想找到一种从Android API查询BT设备的方法。 我发现现在没有可能做到这一点,但我读到了可能符合我要求的bluez API。 有没有人对我有任何链接,提示或建议?

我没有找到任何有用的东西:/

提前致谢。


编辑(2012-09-28):

好的,我认为我现在离解决方案更近一些了。 我从以下网址下载了blueZ库的来源:bluez.org 然后我将重要文件(hci.h,bluetooth.h,hcilib.h及其源文件)放入我的android项目的jni文件夹中,并将它们编译到我的共享库中。 我在函数

周围编写了一个JNI Wrapper
hci_inquiry(int dev_id, int len, int nrsp, const uint8_t *lap,inquiry_info **ii, long flags)

并按照this书的建议进行查询。一切都很好,直到这里。

但是当我开始查询时,功能

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

感谢您的帮助。

0 个答案:

没有答案