Android5.1藍芽電話分析及demo
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.撥打電話demoprivate 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.重要目錄及檔案 1.manager frameworks/base/core/java/android/bluetooth/BluetoothHeadsetClient.java frameworks/base/core/java/android/bluetooth/
android5.1 藍芽子系統介紹(一)Android下bluedroid、bluetooth apk介紹
前言本文件主要介紹android平臺下bluetooth的應用層軟體,先介紹bluetooth應用層的框架,接著分別介紹Bluedroid層軟體、Bluetooth應用程式(Bluetooth.apk),Bluetooth framework層,最後完整分析一些藍芽的操作流程。基於android 5.1的平臺
android5.1藍芽反向控制(Avrcp協議)流程
private BluetoothAvrcpController mAvrcpController; List<BluetoothDevice> devices = mAvrcpController.getConnectedDevices(); for(BluetoothDevice
android藍芽4.0BLE及2.0 2.1 apk 串列埠助手帶16個自定義按鍵和自定義指令 字元接收 十六進位制或字元傳送
android藍芽4.0BLE apk 帶16個自定義按鍵和自定義指令 字元接收 https://pan.baidu.com/s/1eRSfprO android藍芽2.0 2.1 apk 帶16個自定義按鍵和自定義指令 字元接收 帶自動連線 https://pan.b
Synchronized 鎖重入分析及Demo實現
關鍵字synchronized擁有鎖重入的功能,也就是在使用synchronized時,當一個執行緒得到一個物件鎖後,再次請求此物件鎖時是再次得到該物件的鎖的,這也證明在一個synchronized方法 / 塊內部呼叫本類的其他synchronized方法 / 塊時,是永遠可以得到鎖的。
藍芽協議分析_BLE連線有關的技術分析
1. 前言 瞭解藍芽的人都知道,在經典藍芽中,保持連線(Connection)是一個相當消耗資源(power和頻寬)的過程。特別是當沒有資料傳輸的時候,所消耗的資源完全被浪費了。因而,對很多藍芽裝置來說(特別是功耗敏感的裝置),希望在無數可傳的時候,能夠斷開連線。但是,由於
藍芽協議分析(11)_BLE安全機制之SM
1. 前言 注1:此SM是Security Manager的縮寫,非彼SM,大家不要理解歪了! 書接上文,我們在中介紹了BLE安全機制中的終極武器----資料加密。不過使用這把武器有個前提,那就是雙方要共同擁有一個加密key(LTK,Long Term Key)。這個
Stuts2學習筆記(1):環境搭建及Demo
原始碼: github: https://github.com/liaotuo/Struts2-Demo/tree/master/struts2-demo 環境搭建 下載struts2 官網下載:http://mirror.bit.edu.cn/apache/struts
藍芽協議分析(8)_BLE安全機制之白名單
前言 在萬物聯網的時代,安全問題將會受到非常嚴峻的挑戰(相應地,也會獲得最大的關注度),因為我們身邊的每一個IOT裝置,都是一個處於封印狀態的天眼,隨時都有被開啟的危險。想想下面的場景吧: 凌晨2點,x米手環的鬧鐘意外啟動,將你從睡夢中驚醒,然後床頭的燈光忽明忽暗……
藍芽協議分析(6)_BLE地址型別
前言 也許關注BLE的同學都注意到了,BLE裝置有多種型別的裝置地址,如Public Device Address、Random Device Address、Static Device Address、Private Device Address等等。如果不瞭解內情,大家肯定會被
藍芽協議分析(9)_BLE安全機制之LL Privacy
前言 在上一篇文章[1]中,我們介紹了BLE的白名單機制,這是一種通過地址進行簡單的訪問控制的安全機制。同時我們也提到了,這種安全機制只防君子,不防小人,試想這樣一種場景: A裝置表示只信任B、C、D裝置,因此就把它們的地址加入到了自己的白名單中,表示只願意和它們溝通。與此
IPhone MFI藍芽認證分析
一、開發專案:藍芽解碼槍 公司近期立項開發藍芽解碼槍專案,該專案通過解碼槍終端掃描解碼,然後通過藍芽將資料傳送到手機(基於安卓,IOS系統)。目前已經完成了安卓裝置的APP開發工作,支援大多數的主流安卓裝置(主要安卓各廠商的藍芽不同,完全相容希望不大),然後打算繼續
在Android4.2中實現bluetooth A2dp Sink(二)——移植Android5.0藍芽協議棧
在Android中,藍芽系統的結構如下圖所示: 在這個體系結構中,從下往上依次是模組驅動、藍芽協議棧、Bluetooth.apk、Framework和各種藍芽應用。其中,核心中的驅動是直接和硬體打交道的,一般由模組廠商提供。Android層中,最下面的是處
在Android4.2中實現bluetooth A2dp Sink(一)——移植Android5.0藍芽協議棧
一直以來,Android對於藍芽的支援都很混亂,簡直可以說是一坨shit。各個版本的協議棧都不一樣,最早用的是bluez,進入4.x時代之後,換成了谷歌自己的bluedroid。換就換吧,至少等做完了再用吧,結果4.2、4.3、4.4的bluedroid全都不一樣。
Android藍芽原始碼分析——BTA層訊息分發
這裡BTA是Bluetooth Application的縮寫,從上層下來的請求都要經過這個BTA層,通過傳送訊息的方式將請求丟到BTA層中處理。這個傳送訊息的函式定義在bta_sys_main.c中,如下: void bta_sys_sendmsg(voi
Android5.1網路切換策略分析
最近在在5.1移植了乙太網過來,移植的過程並沒有什麼大問題,修改了框架上的代以及添加了Settings程式碼,乙太網除錯就基本完工了,後面只是修改下佈局即可。但是網路切換策略就有所變化了,就不得不重新認識5.1的網路切換策略了。 在android4.4上,想實
Android平臺藍芽程式設計之藍芽聊天分析(二)
接著上一篇沒有完成的任務,我們繼續分析這個藍芽聊天程式的實現,本文主要包括以下兩個部分的內容:其一,分析掃描裝置部分DeviceListActivity,其二,分析具體的聊天過程的完整通訊方案,包括埠監聽、連結配對、訊息傳送和接收等,如果有對上一篇文章不太熟悉的,可以返回
Android BroadcastReceiver + 藍芽狀態監聽Demo
1、BroadcastReceiver基礎 動態註冊 靜態註冊 動態繫結 動態登出 實現靜態登出【其實就是設定不去響應,並沒有所謂登出】 2、程式碼走起 MyBroadcast: 會在MianActivity中使用程式碼動態註冊它 package
Android5.1 內建第三方APK及Android.mk檔案編寫(以在amlogic5.1公版系統內建百度輸入法為例)
Android.mk檔案用來向編譯系統描述如何編譯你的原始碼。在編譯整個工程的情況下,系統所找到的所有的Android.mk將會先存入subdir_makefiles變數中,隨後一次性一次性include進整個編譯檔案中。 示例 Android.mk內容:
藍芽API介紹及基本功能實現
本文已授權微信公眾號fanfan程式媛獨家釋出 ONE,傳統藍芽 BluetoothAdapter:本地藍芽裝置介面卡,用於管理藍芽的開啟/關閉、重新命名、掃描、配對、連線BluetoothClass:藍芽裝置類,用於描述藍芽裝置型別BluetoothDevice:遠端