Android 低功耗Ble 藍(lán)牙4.0多連接 開源框架

ManyBlue

最近在開發(fā)Ble的項(xiàng)目吐葱,自己也在用這個(gè) 有發(fā)現(xiàn)bug會(huì)第一時(shí)間修復(fù)提交更新

如果有好的建議 可以郵件聯(lián)系我 admin@javac.io

文檔以Github為主 博客文章不會(huì)經(jīng)常更新俏脊。
Github倉庫地址 https://github.com/pencilso/ManyBlue

添加依賴 compile 'io.javac:ManyBlue:1.0.5'

依賴內(nèi)部維護(hù)了一個(gè)Service 所以需要優(yōu)先檢測(cè)Service

ManyBlue.runing(Context context)
  • 啟動(dòng)服務(wù) ManyBlue.blueStartService(Context context);
  • 關(guān)閉服務(wù) ManyBlue.blueStopService(this);
  • 藍(lán)牙開啟狀態(tài) ManyBlue.blueEnableState();
  • 打開手機(jī)藍(lán)牙 ManyBlue.blueEnable(true);
  • 關(guān)閉手機(jī)藍(lán)牙 ManyBlue.blueEnable(false);

注冊(cè)|取消 事件

建議新建一個(gè)BaseActivity  然后繼承自你現(xiàn)有的BaseActivity
然后重寫onStart onStop 進(jìn)行取消 和注冊(cè)事件 跟處理監(jiān)聽事件
 @Override
protected void onStart() {
    super.onStart();
    EventManager.getLibraryEvent().register(this);//注冊(cè)
}

@Override
protected void onStop() {
    super.onStop();
    EventManager.getLibraryEvent().unregister(this);//取消
}


//訂閱消息
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(NotifyMessage notifyMessage) {
    LogUtils.log(notifyMessage);
    if (this instanceof BaseNotifyListener)
        ManyBlue.dealtListener((BaseNotifyListener) this, notifyMessage);//處理監(jiān)聽
}

手機(jī)藍(lán)牙的監(jiān)聽

實(shí)現(xiàn)接口 BaseNotifyListener.MobileBlueListener

@Override
public void onMobileBlueState(boolean enabled) {
    appToast("藍(lán)牙開啟狀態(tài):" + enabled);
}

@Override
public void onMobileBlueEnabled(boolean success) {
    appToast("開啟手機(jī)藍(lán)牙:" + success);
}

@Override
public void onMobileBlueDisable(boolean success) {
    appToast("關(guān)閉手機(jī)藍(lán)牙:" + success);
}

藍(lán)牙服務(wù)的監(jiān)聽

實(shí)現(xiàn)接口 BaseNotifyListener.ServiceListener

`@Override
public void onServiceStart() {
    appToast("藍(lán)牙服務(wù)已開啟");
}

@Override
public void onServiceStop() {
    appToast("藍(lán)牙服務(wù)已關(guān)閉");
}`

掃描設(shè)備

  • 掃描藍(lán)牙 ManyBlue.blueStartScaner();
  • 停止掃描 ManyBlue.blueStopScaner();
  • 連接設(shè)備 ManyBlue.blueConnectDevice(String address, Object tag);//tag是自定義的標(biāo)記 用來標(biāo)記多設(shè)備

實(shí)現(xiàn)接口 BaseNotifyListener.DeviceListener

`/**
 * 掃描到藍(lán)牙設(shè)備
 *
 * @param device
 */
@Override
public void onDeviceScanner(BluetoothDevice device) {
    adapter.addDevice(device);
}

/**
 * 藍(lán)牙設(shè)備連接或者斷開
 *
 * @param state true為連接 false為斷開
 */
@Override
public void onDeviceConnectState(boolean state, Object tag) {
    if (!state) {
        appToast("連接失敗");
        dismissDialog();
    } else setDialog("連接成功 正在發(fā)現(xiàn)服務(wù)");
}

@Override
public void onDeviceServiceDiscover(List<BluetoothGattService> services, Object tag) {
    setDialog("正在注冊(cè)服務(wù)");
    //services 這是該設(shè)備中所有的服務(wù) 在這里找到需要的服務(wù) 然后再進(jìn)行注冊(cè)
//                services.get(0).getUuid().toString();//這是獲取UUID的方法
    //找到需要的UUID服務(wù)  然后進(jìn)行連接  比如說我需要的服務(wù)UUID是00003f00-0000-1000-8000-00805f9b34fb UUID的話  一般設(shè)備廠家會(huì)提供文檔 都有寫的
    UUIDMessage uuidMessage = new UUIDMessage();//創(chuàng)建UUID的配置類
    uuidMessage.setCharac_uuid_service("00003f00-0000-1000-8000-00805f9b34fb");//需要注冊(cè)的服務(wù)UUID
    uuidMessage.setCharac_uuid_write("00003f02-0000-1000-8000-00805f9b34fb");//寫出數(shù)據(jù)的通道UUID
    uuidMessage.setCharac_uuid_read("00003f01-0000-1000-8000-00805f9b34fb");//讀取通道的UUID
    uuidMessage.setDescriptor_uuid_notify("00002902-0000-1000-8000-00805f9b34fb");//這是讀取通道當(dāng)中的notify通知
    /**
     * 這里簡(jiǎn)單說一下  如果設(shè)備返回?cái)?shù)據(jù)的方式不是Notify的話  那就意味著向設(shè)備寫出數(shù)據(jù)之后   再自己去獲取數(shù)據(jù)
     * Notify的話 是如果藍(lán)牙設(shè)備有數(shù)據(jù)傳遞過來  能接受到通知
     * 使用場(chǎng)景中如果沒有notify的話  notify uuid留空即可
     */
    ManyBlue.blueRegisterDevice(uuidMessage, tag);//注冊(cè)設(shè)備
}

@Override
public void onDeviceRegister(boolean state) {
    dismissDialog();
    appToast(state ? "設(shè)備注冊(cè)成功" : "設(shè)備注冊(cè)失敗");
}

監(jiān)聽所有回調(diào)

實(shí)現(xiàn)接口 BaseNotifyListener.NotifyListener

發(fā)送|接收 藍(lán)牙數(shù)據(jù)

  • 獲取已連接設(shè)備 ManyBlue.getConnDeviceAll();
  • 實(shí)現(xiàn)接口 BaseNotifyListener.DeviceDataListener
  • 發(fā)送字符轉(zhuǎn)十六進(jìn)制 ManyBlue.blueWriteDataStr2Hex(str, tag); //例如 0x0a0a01

回調(diào)事件

/**
 * 向藍(lán)牙發(fā)送數(shù)據(jù)后的回調(diào)
 *
 * @param state 發(fā)送成功true  發(fā)送失敗false
 */
@Override
public void onDeviceWriteState(boolean state, Object tag) {
    dismissDialog();//關(guān)閉Dialog
    appToast("指令發(fā)送狀態(tài):" + state);
    /**
     * 如果是非Notify的接收方式的話 這里需要手動(dòng)去調(diào)用讀取通道
     */
    //ManyBlue.blueReadData(tag); //主動(dòng)獲取數(shù)據(jù)
}

/**
 * 主動(dòng)讀取的通道數(shù)據(jù)
 *
 * @param characteristicValues 讀取到的數(shù)據(jù)
 */
@Override
public void onDeviceReadMessage(CharacteristicValues characteristicValues) {
    LogUtils.log("onDeviceReadMessage   strValue:" + characteristicValues.getStrValue() + " hex2Str:" + characteristicValues.getHex2Str() + " byArr:" + characteristicValues.getByArr());
}

/**
 * Notify監(jiān)聽收到的數(shù)據(jù)
 *
 * @param characteristicValues 讀取到的數(shù)據(jù)
 */
@Override
public void onDeviceNotifyMessage(CharacteristicValues characteristicValues) {
    LogUtils.log("onDeviceNotifyMessage    strValue:" + characteristicValues.getStrValue() + " hex2Str:" + characteristicValues.getHex2Str() + " byArr:" + characteristicValues.getByArr());
}

已連接設(shè)備

  • 獲取所有已連接設(shè)備 ManyBlue.getConnDeviceAll()
  • 獲取指定標(biāo)識(shí)設(shè)備 ManyBlue.getConnDevice(tag);
  • 斷開指定設(shè)備 ManyBlue.blueDisconnectedDevice(tag);
  • 斷開所有設(shè)備 ManyBlue.blueDisconnectedDeviceAll();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霞溪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子惹资,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幌缝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诫欠,警方通過查閱死者的電腦和手機(jī)涵卵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荒叼,“玉大人轿偎,你說我怎么就攤上這事”焕” “怎么了坏晦?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)伊者。 經(jīng)常有香客問我英遭,道長(zhǎng),這世上最難降的妖魔是什么亦渗? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任挖诸,我火速辦了婚禮,結(jié)果婚禮上法精,老公的妹妹穿的比我還像新娘多律。我一直安慰自己,他們只是感情好搂蜓,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布狼荞。 她就那樣靜靜地躺著,像睡著了一般帮碰。 火紅的嫁衣襯著肌膚如雪相味。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天殉挽,我揣著相機(jī)與錄音丰涉,去河邊找鬼拓巧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛一死,可吹牛的內(nèi)容都是我干的肛度。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼投慈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼承耿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伪煤,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤加袋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后抱既,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锁荔,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年蝙砌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阳堕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡择克,死狀恐怖恬总,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肚邢,我是刑警寧澤壹堰,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站骡湖,受9級(jí)特大地震影響贱纠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜响蕴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一谆焊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浦夷,春花似錦辖试、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肥缔,卻和暖如春莲兢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工改艇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俗慈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓遣耍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親炮车。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舵变,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容