Android5.1蓝牙电话分析及demo
参考: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相关推荐
- python景点情感分析代码_python snownlp情感分析简易demo(分享)
SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和T ...
- 基于python的情感分析案例-python snownlp情感分析简易demo(分享)
SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和T ...
- Android5.1 -Recents分析
Android使用RecentsActivity来展示最近使用过的app.至于此界面,不同品牌的Android智能手机,可能界面都会有所不一样.以Android 5.1的RecentsActivity ...
- python情感分析预测模型_python snownlp情感分析简易demo
SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和T ...
- ALSA驱动中snd_soc_write()原理分析及demo(二十二)
其实底层是调用remap_write()者i2c_transter()来写i2c设备寄存器,自查. 1.Audio Codec查结构体 kernel/include/sound/soc.h /* So ...
- python snownlp_python snownlp情感分析简易demo
SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和T ...
- JS完美运动框架详解——原理分析及demo
1.运动原理 Js运动,本质来说,就是让 web 上 DOM 元素动起来.而想要 DOM 动起来,改变其自身的位置属性,比如高宽,左边距,上边距,透明度等.还有一个很重要的前提是,运动的物体必须是绝对 ...
- python snownlp评论分析_python snownlp情感分析简易demo
SnowNLP是国人开发的python类库,能够方便的处理中文文本内容,是受到了TextBlob的启发而写的,因为如今大部分的天然语言处理库基本都是针对英文的,因而写了一个方便处理中文的类库,而且和T ...
- 独立成分分析及Demo
1. 独立成分分析建模 独立成分分析目标是实现在海量数据中学习完备的单位正交基,所以,所以,可以建立如下的最优化问题: 其中,第一项为稀疏约束,第二项为完备单位正交基约束,熟悉稀疏表示的可能会注意到, ...
最新文章
- 吴恩达机器学习笔记 —— 3 线性回归回顾
- linux上的定时器上的jiffies,linux定时器和Jiffies汇.doc
- JavaScript call,apply和prototype的介绍,区别
- node 加密解密模块_NODE.JS加密模块CRYPTO常用方法介绍
- day3----python变量与常量
- 使用router-view时组件之间的通信
- Could not find module ‘D:\codna\Library\bin\geos_c.dll‘
- 短视频成青少年教育新工具:抖音等三机构联合发起“青椒计划”
- Python+OpenCV:对极几何(Epipolar Geometry)
- 前端通过jqplot绘制折线图
- java collection key_Java Collection总结
- 【总结一下|LaTex语法】一些常用的LaTex语法小知识
- 科来网络分析系统(CSNAS)
- win7、10系统怎么设置打印机共享(打印机USB接口共享)
- Paper | Detail-revealing Deep Video Super-resolution
- 剪刀石头布java流程图_青岛能源所基于“剪刀石头布”策略实现快速多轮基因编辑...
- 关于vue项目表单验证身份证号的正则表达式
- WorksheetFunction 成员 (Excel)
- 一个详细测试用例的文档
- 记录爬虫实战——有道翻译(反js加密)