参考:android源码蓝牙协议分析

1.重要目录及文件

1.manager

frameworks/base/core/java/android/bluetooth/BluetoothHeadsetClient.java

frameworks/base/core/java/android/bluetooth/IBluetoothHeadsetClient.aidl

2.Bluethooth.apk

packages/apps/Bluetooth/src/com/android/bluetooth/hfp //蓝牙电话服务(免提)

packages/apps/Bluetooth/src/com/android/bluetooth/hfpclient //蓝牙耳机服务

packages/apps/Bluetooth/res/values/config.xml //蓝牙协议配置文件,想用哪个配置为true即可

packages/apps/Bluetooth/src/com/android/bluetooth/btservice/Config.java //读取蓝牙协议xml配置文件

packages/apps/Bluetooth/src/com/android/bluetooth/btservice/AdapterService.java //启动蓝牙等服务

3.service

//manager跨进程调用HeadsetClientStateMachine服务

packages/apps/Bluetooth/src/com/android/bluetooth/hfpclient/HeadsetClientService.java

//HeadsetClientStateMachine服务通过jni调用C/C++通信

packages/apps/Bluetooth/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java

4.hal

external/bluetooth/bluedroid/btif/src/bluetooth.c

struct hw_module_t HAL_MODULE_INFO_SYM = {

.id = BT_HARDWARE_MODULE_ID,

.methods = &bt_stack_module_methods

};

5.kernel

kernel/net/rfkill/rfkill.c

module_init(rfkill_xx_init);                                                                        |

2.蓝牙耳机服务:HeadsetClientService的connect()调用流程

<1>frameworks/base/core/java/android/bluetooth/BluetoothHeadsetClient.java

privateIBluetoothHeadsetClientmService;

publicbooleanconnect(BluetoothDevicedevice) {

return mService.connect(device);

}

<2>packages/apps/Bluetooth/src/com/android/bluetooth/hfpclient/HeadsetClientService.java

import android.bluetooth.IBluetoothHeadsetClient;

import android.bluetooth.BluetoothHeadsetClient;

private static class BluetoothHeadsetClientBinder extendsIBluetoothHeadsetClient.Stub implementsIProfileServiceBinder {

private HeadsetClientService mService;

public BluetoothHeadsetClientBinder(HeadsetClientService svc) {

mService = svc;//HeadsetClientService svc

}

private HeadsetClientService getService() {

return mService;//mService = svc

}

@Override

public boolean connect(BluetoothDevice device) {

HeadsetClientService service = getService();

return service.connect(device);//HeadsetClientService service

}}

public boolean connect(BluetoothDevice device) {

mStateMachine.sendMessage(HeadsetClientStateMachine.CONNECT, device);//发送消息:CONNECT

return true;

}

<3>packages/apps/Bluetooth/src/com/android/bluetooth/hfpclient/HeadsetClientStateMachine.java

private native booleanconnectNative(byte[] address);

@Override

public synchronized boolean processMessage(Message message){

switch (message.what){

case CONNECT:

if (!connectNative(getByteAddress(device))){

...

}

}

}

<4>packages/apps/Bluetooth/jni/com_android_bluetooth_hfpclient.cpp

static jbooleanconnectNative(JNIEnv *env, jobject object, jbyteArray address) {

status =sBluetoothHfpClientInterface->connect((bt_bdaddr_t *)addr)

}

<5>external/bluetooth/bluedroid/btif/src/btif_hf_client.c

static const bthf_client_interface_t bthfClientInterface = {

sizeof(bthf_client_interface_t),

.init = init,

.connect =connect,

...

}

<5>kernel/net/rfkill/input.c

static struct input_handler rfkill_handler = {

...

.connect =rfkill_connect,

};

3.拨打电话demo

private BluetoothHeadsetClient mHfpClient;

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

bluetoothAdapter.getProfileProxy(this, mHandsFreeServiceListener, BluetoothProfile.HEADSET_CLIENT);

private BluetoothProfile.ServiceListener mHandsFreeServiceListener = new BluetoothProfile.ServiceListener(){

@Override

public void onServiceConnected(int profile, BluetoothProfile proxy) {

if(profile == BluetoothProfile.HEADSET_CLIENT){

Log.e(TAG,"HEADSET_CLIENT proxy ========= "+ String.valueOf(proxy));

mHfpClient = (BluetoothHeadsetClient)proxy;

List<BluetoothDevice> devices = mHfpClient.getConnectedDevices();

for(BluetoothDevice device : devices){

mHfpClient.dial(device_test,"10086");//拨号

}

}

}

@Override

public void onServiceDisconnected(int profile){

if (profile == BluetoothProfile.HEADSET_CLIENT)) {

mHfpClient = null;

}

}

}





Android5.1蓝牙电话分析及demo相关推荐

  1. python景点情感分析代码_python snownlp情感分析简易demo(分享)

    SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和T ...

  2. 基于python的情感分析案例-python snownlp情感分析简易demo(分享)

    SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和T ...

  3. Android5.1 -Recents分析

    Android使用RecentsActivity来展示最近使用过的app.至于此界面,不同品牌的Android智能手机,可能界面都会有所不一样.以Android 5.1的RecentsActivity ...

  4. python情感分析预测模型_python snownlp情感分析简易demo

    SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和T ...

  5. ALSA驱动中snd_soc_write()原理分析及demo(二十二)

    其实底层是调用remap_write()者i2c_transter()来写i2c设备寄存器,自查. 1.Audio Codec查结构体 kernel/include/sound/soc.h /* So ...

  6. python snownlp_python snownlp情感分析简易demo

    SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和T ...

  7. JS完美运动框架详解——原理分析及demo

    1.运动原理 Js运动,本质来说,就是让 web 上 DOM 元素动起来.而想要 DOM 动起来,改变其自身的位置属性,比如高宽,左边距,上边距,透明度等.还有一个很重要的前提是,运动的物体必须是绝对 ...

  8. python snownlp评论分析_python snownlp情感分析简易demo

    SnowNLP是国人开发的python类库,能够方便的处理中文文本内容,是受到了TextBlob的启发而写的,因为如今大部分的天然语言处理库基本都是针对英文的,因而写了一个方便处理中文的类库,而且和T ...

  9. 独立成分分析及Demo

    1. 独立成分分析建模 独立成分分析目标是实现在海量数据中学习完备的单位正交基,所以,所以,可以建立如下的最优化问题: 其中,第一项为稀疏约束,第二项为完备单位正交基约束,熟悉稀疏表示的可能会注意到, ...

最新文章

  1. 吴恩达机器学习笔记 —— 3 线性回归回顾
  2. linux上的定时器上的jiffies,linux定时器和Jiffies汇.doc
  3. JavaScript call,apply和prototype的介绍,区别
  4. node 加密解密模块_NODE.JS加密模块CRYPTO常用方法介绍
  5. day3----python变量与常量
  6. 使用router-view时组件之间的通信
  7. Could not find module ‘D:\codna\Library\bin\geos_c.dll‘
  8. 短视频成青少年教育新工具:抖音等三机构联合发起“青椒计划”
  9. Python+OpenCV:对极几何(Epipolar Geometry)
  10. 前端通过jqplot绘制折线图
  11. java collection key_Java Collection总结
  12. 【总结一下|LaTex语法】一些常用的LaTex语法小知识
  13. 科来网络分析系统(CSNAS)
  14. win7、10系统怎么设置打印机共享(打印机USB接口共享)
  15. Paper | Detail-revealing Deep Video Super-resolution
  16. 剪刀石头布java流程图_青岛能源所基于“剪刀石头布”策略实现快速多轮基因编辑...
  17. 关于vue项目表单验证身份证号的正则表达式
  18. WorksheetFunction 成员 (Excel)
  19. 一个详细测试用例的文档
  20. 记录爬虫实战——有道翻译(反js加密)

热门文章

  1. 거든---表示条件,后接祈使,劝诱,意志语句
  2. u3d打包成exe以及调试
  3. SAP手记之六:GUI安装后初始配置(中文语言包安装)
  4. Apache Dril l和 Prestodb是合并多租数据源户统一查询
  5. 谷歌发布 Android 11 的第二个开发者预览版
  6. Node.js API 全栈 开发框架
  7. php preview,preview.php
  8. c++求矩阵的秩_利用Python矩阵求逆、特征值及特征向量
  9. Javascript变量的使用第三课
  10. vue 登录页面记住密码功能