android的bluetooth架构是建立在bluez之上的,bluz通过dbus暴露了底层蓝牙设备的服务。先用android内置的命令bttest enable,开启bluedroid进程。这样bluz就可以接收dbus请求了。先来看段简单dbus代码:


char*
send_method_call_with_string_reply(char* objectPath,
char* type, char* name)
{
DBusMessage* msg;
DBusMessage* reply;
DBusConnection* conn;
DBusError err;
const char *reply_path;
char *path;

// initialise the error value
dbus_error_init(&err);

printf("get dbus connection:\n");
conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err);
if (dbus_error_is_set(&err))
{
fprintf(stderr, "Connection Error (%s)\n", err.message);
dbus_error_free(&err);
}
if (NULL == conn)
{
printf("conn is null\n");
goto done;
}

msg = dbus_message_new_method_call(“org.bluez”, // target for the method call
objectPath, // object to call on
type, // interface to call on
name); // method name
if (NULL == msg)
{
fprintf(stderr, "Message Null\n");
goto done;
}

reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &err);

if (!reply)
{
fprintf(stderr, "Can't get reply\n");
if (dbus_error_is_set(&err))
{
fprintf(stderr, "%s\n", err.message);
dbus_error_free(&err);
}
goto done;
}

if (!dbus_message_get_args(reply, &err, DBUS_TYPE_OBJECT_PATH, &reply_path,
DBUS_TYPE_INVALID))
{
fprintf(stderr, "Can't get reply arguments\n");
if (dbus_error_is_set(&err))
{
fprintf(stderr, "%s\n", err.message);
dbus_error_free(&err);
}
goto done;
}
path = strdup(reply_path);

dbus_connection_flush(conn);

printf("method call Sent\n");

done:
// free the message
if(msg)
dbus_message_unref(msg);
if(reply)
dbus_message_unref(reply);

return path;
}测试程序如下


#include <dbus/dbus.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv) {
printf("----------------------test dbus start----------------------\n");

char* ss = send_method_call_with_string_reply("/","org.bluez.Manager","DefaultAdapter");
printf("reteun value:%s\n",ss);
free(ss);
printf("-----------------------test dbus end-----------------------\n");
return 1;
}在android.mk中添加LOCAL_SHARED_LIBRARIES := libbluedroid libdbus,再加上dbus头文件就能编过。

更多相关文章

  1. android 获取唯一标识
  2. Android架构分析之使用自定义硬件抽象层(HAL)模块
  3. Android获取设备唯一标识完美解决方案
  4. Android(安卓)SDK自带教程之BluetoothChat
  5. Android(安卓)RIL总体架构介绍
  6. Android(安卓)源码结构
  7. android底层开发
  8. android bluetooth 移植相关注意事项
  9. Android(安卓)PinyinIME 源码笔记 -- 0. 简介

随机推荐

  1. Android(安卓)RecyclerView 的 网格布局
  2. 微信支付宝支付调用SDK
  3. 也谈Android下一个apk安装多个程序入口图
  4. Activity的构成
  5. Android异步加载全解析之引入二级缓存
  6. Android中的Nine-patch图片
  7. Android(安卓)App性能优化(1)——App启动优
  8. 基于NDK的Android防破解
  9. Android(安卓)Studio导入项目gradle报错,
  10. Android(安卓)sdk content loader 0%的解