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

main函数:

#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 FrameWork 底层开发
  3. 低功耗蓝牙(BLE)之概念理解
  4. 初涉Android蓝牙开发(转) 收藏以备后用
  5. 创建Android守护进程(底层服务)
  6. Android 蓝牙调色灯/zigbee调色灯学习开发实战

随机推荐

  1. [android] 将Java程序移植到android上
  2. Android(安卓)TextView的特殊使用:阴影,加
  3. android基础知识12:android自动化测试03—
  4. 深入解读Linux与Android的相互关系
  5. Android(安卓)4.0 input touch解析(一)
  6. Android系统体系结构
  7. Android自定义视图二:如何绘制内容
  8. Handler的运行机制
  9. android 进程之间通信--Android(安卓)使
  10. Android开发人员的10大抱怨