我正在寻找一种从我的 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);
感谢您的任何帮助。