`
kerrysk
  • 浏览: 17099 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

用Dbus与android的bluz通信

阅读更多

          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头文件就能编过。

 

 

 

 

分享到:
评论

相关推荐

    dbus的c++封装以及多进程dbus双向通信例程

    主要是对dbus进行c++封装成了一个dbus类,对外保留发送和接收的接口,方便使用;另外实现多进程dbus的双向通信测试,详细说明见博客&lt;&lt;Dbus 的编译(移植)以及双向通信使用例程&gt;&gt;

    android dbus应用

    在 Android 系统中,DBus 是一个基于 Linux DBus 技术实现的进程间通信(IPC, Inter-Process Communication)框架。DBus 允许不同进程之间的应用程序通过发送消息来相互协作,实现了服务的发布、订阅和调用,是 ...

    Node.js-使用dbus与wpasupplicant交互的Node.js模块

    在这个场景中,我们关注的是一个特定的Node.js模块,它用于与`wpa_supplicant`进行交互,利用`dbus`(Desktop Bus)协议,这是一种在Linux系统中广泛使用的进程间通信(IPC)机制。 `wpa_supplicant`是一个无线网络...

    QT 的应用程序间的DBUS通信

    本文将深入探讨如何使用Qt与DBus进行应用程序间的通信。 首先,理解DBus的基本概念是必要的。DBus是一种轻量级的消息传递机制,它定义了一种标准的接口,允许不同的软件组件之间交换信息。DBus有两种主要的通信类型...

    QtDbus资料集合

    QtDbus是Qt框架下与DBus交互的模块,它允许Qt应用程序与其他进程通过DBus协议进行通信。DBus是一种轻量级的消息传递系统,常用于Linux和其他类UNIX系统中的进程间通信(IPC)。QtDbus提供了方便的API,使得Qt开发者...

    dbus例程.zip

    DBus是Linux系统中的一种消息总线服务,它允许不同进程之间的通信,特别是在桌面环境中,用于应用程序间的服务共享和事件通知。在本压缩包"dbus例程.zip"中,包含了一个C语言编写的示例程序(dbus.c)以及一份文档...

    dbus绿色版支持Windows10,基于dbus-1.13.6编译

    在Windows上使用DBus,开发者和系统管理员可以实现跨进程通信,比如让桌面应用和服务共享数据、订阅事件或者调用远程方法。这对于那些希望在Windows平台上利用Linux生态的开发者来说尤其有用,因为许多开源项目依赖...

    dbus-glib使用教程

    DBus 总线分为系统总线与会话总线两类,两者之前不能互相通信,所以任何应用程序不能欺骗系统事件,安全性很好。 二、Dbus-glib 介绍 Dbus-glib 是 GNU 标准库,在 Dbus 接口上封装,方便上层服务与应用更好的使用...

    QT中DBUS的用法

    1. **建立连接**:使用`QDBusConnection`类来建立与DBUS总线的连接。通常有系统总线(/org/freedesktop/DBus)和会话总线(/org/freedesktop/DBus/Session)。你可以通过`QDBusConnection::systemBus()`或`...

    dbus编译后的package

    DBus是Linux系统中的一种消息总线服务,它允许不同进程之间进行通信,是系统服务、应用程序间交互的重要工具。在Linux环境中,DBus常用于启动、停止服务,传递事件,以及在程序之间共享数据。"dbus编译后的package...

    qt for windows版本下编译qtdbus模块

    本文将详细介绍如何在 Windows 环境下构建 QtDBus 库,并通过具体的示例来演示其运行与通信机制。 #### 准备工作 在开始之前,请确保安装了以下软件: - **expat-2.1.0.tar.gz** 及其 Windows 二进制版本 `expat-...

    dbus基础知识

    DBus 是一个在 Linux 和其他 Unix-like 操作系统中广泛使用的进程间通信(IPC)机制,它允许不同的应用程序之间共享服务和传递消息。DBus 的设计目标是简化桌面环境中的组件交互,但它的应用范围已经超越了桌面环境...

    dbus 使用介绍,包含一个例子,包括配置文件介绍及自启动介绍

    ### D-Bus 使用介绍 #### 1. D-Bus 概述 ##### 1.1 D-Bus 是什么 D-Bus(Desktop Bus)是一种高效、轻量级的进程间通信(IPC)机制,主要用于Linux桌面环境中的软件组件之间进行通信。它支持点对点的通信模式以及...

    Dbus简介和例程

    5. **DBus的连接与认证**:每个应用程序连接到DBus时都需要进行身份验证,可以使用简单的口令、系统认证机制如PAM,或者更复杂的机制如X.509证书。 6. **DBus的信号和槽**:类似于Qt中的信号和槽,DBus的信号可以...

    dbus测试程序

    在本例中,"dbus测试glib"意味着我们将探讨如何使用GLib库来与DBus进行交互。 GLib是GObject系统的基础库,广泛用于各种GTK+和GNOME应用程序中。它提供了许多实用的函数,包括内存管理、线程支持以及事件循环。在与...

    dbus-cxx-0.7.0.zip_DBUS_DBUS 封装_dbus c++

    - **连接和断开DBus**:使用`Bus::System()`或`Bus::Session()`创建一个与系统或会话总线的连接,然后通过`disconnect()`断开连接。 - **注册对象和接口**:通过`ObjectManager`将你的对象路径和接口注册到DBus上,...

    dbus example for low api

    总结来说,"dbus example for low api"是一个实用的例子,展示了如何使用DBus的基本API实现服务端和客户端的通信。它涵盖了信号的发送、方法的调用以及相应的事件处理。对于理解DBus的工作原理和编写基于DBus的应用...

    QT DBUS通讯小程序

    例如,使用QDBusConnection类来建立和管理与DBus总线的连接,QDBusInterface和QDBusObjectPath类则用于与DBus上的对象交互。 在"QT DBUS通讯小程序"中,我们可能可以看到以下关键组件: 1. **DBus服务端**:这部分...

    ARM平台下交叉编译的DBUS1.2的代码和库

    - **版本兼容性**:尽管DBUS1.2相对旧一些,但确保与目标系统上的其他组件兼容是重要的。 总之,DBUS1.2的交叉编译对于在ARM平台上的嵌入式Linux系统开发至关重要,它能够提供可靠且高效的进程间通信机制,简化系统...

Global site tag (gtag.js) - Google Analytics