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();