5

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

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

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

提前致谢。


编辑(2012-09-28):

好的,我想我现在更接近解决方案了。我从bluez.org下载了 blueZ 库的源代码 然后我将重要文件(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)

并按照本书的建议做我的调查。一切都很好,直到这里。

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

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

感谢您的任何帮助。

4

0 回答 0