亚洲国产欧美一区二区三区丁香婷,国产精品高潮呻吟久久av免费看 ,欧美无遮挡一区二区三区国产对白,日本一区二区免费不卡中文字幕

分享我的Android藍(lán)牙開源作品—HBluetooth

本篇將跟大家分享我在github上的一個開源項(xiàng)目,是關(guān)于安卓藍(lán)牙開發(fā)的封裝,包含藍(lán)牙設(shè)備的搜尋、連接、通信,支持經(jīng)典藍(lán)牙和低功耗藍(lán)牙,語言版本有Java和Kotlin兩個版本。...

哥們,我最近搞了個關(guān)于安卓藍(lán)牙開發(fā)封裝的開源項(xiàng)目。這玩意兒兼容老式藍(lán)牙和低功耗藍(lán)牙,用Java和其他幾種語言編寫。做這個主要是想幫新手和學(xué)習(xí)者們更好地弄懂安卓藍(lán)牙怎么玩。初衷可不是為了填補(bǔ)市場的空缺,而是想讓剛?cè)胄械男』锇閭冇袀€學(xué)習(xí)的起點(diǎn)。下邊,我得詳細(xì)跟大家說說怎么用這個項(xiàng)目,還有我的一些想法。

一、為什么選擇封裝這個框架

我想到要搞個封裝的框架開源語言安卓版,主要是因?yàn)樽霭沧克{(lán)牙開發(fā)時發(fā)現(xiàn),市面上的好東西不少,可對新手來說,那些框架太復(fù)雜了,理解起來也不容易。所以我想弄個簡單好懂點(diǎn)的框架,讓新手們更快學(xué)會藍(lán)牙開發(fā)。所以設(shè)計(jì)框架的時候,我特別留意分的模塊和代碼的清晰度,希望每個新手讀源碼的時候都能感到做藍(lán)牙開發(fā)的樂趣。

在這套體系中,我盡量不搞得太復(fù)雜,直接用安卓原生代碼,讓大家看清楚每一步的操作。雖然我水平有限,做不到完美,但想通過這個項(xiàng)目,激發(fā)大家對安卓藍(lán)牙開發(fā)的興趣。畢竟,學(xué)東西本身就是挺有意思的,這框架是我分享樂趣的一種方式。

二、我的開發(fā)經(jīng)歷與收獲

我工作里相當(dāng)一部分時間都在研究藍(lán)牙這事兒。封裝這個框架開源語言安卓版,主要是為了幫助別人,其實(shí)也讓我自己對藍(lán)牙有了更深的認(rèn)識。在這一來一回的摸索里,我對藍(lán)牙開發(fā)的玩意兒有了新的梳理,發(fā)現(xiàn)了好多之前沒留意的細(xì)節(jié)。比如,藍(lán)牙設(shè)備怎么連接,通信時注意事項(xiàng)那些,都是在弄框架的過程中慢慢領(lǐng)悟的。

而且,項(xiàng)目做著做著,我慢慢發(fā)現(xiàn)藍(lán)牙開發(fā)不簡單,特別在兼容各種藍(lán)牙設(shè)備時,老碰上沒想到的麻煩。這經(jīng)歷讓我更有心把這套框架分享出去,希望幫到更多開發(fā)者,尤其是剛接觸這個新領(lǐng)域的朋友們。

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

三、項(xiàng)目的基本使用方法

dependencies {
     implementation 'com.github.g-HJY:HBluetooth:V1.3.6'
}

大家好,我來講講這個開源項(xiàng)目的用法。它有兩種語言版本,Java和另一個版本,隨便選一個你喜歡來開發(fā)。接入這框架特別容易,要么下全套項(xiàng)目,要么簡單加上依賴到你的項(xiàng)目里即可。

         public class MyApp extends Application {
             @Override
             public void onCreate() {
                 super.onCreate();
                 //初始化 HBluetooth
                 HBluetooth.init(this);
             }
         }

用之前,先在你的應(yīng)用里跑一遍初始化流程。然后,別忘了打開藍(lán)牙功能,這可是關(guān)鍵一步。要是你用低功耗藍(lán)牙,還得設(shè)置點(diǎn)東西,比如主要服務(wù)ID、讀寫特征的ID這類的。聽著麻煩開源語言安卓版,但都是為了設(shè)備能順暢連接和交流。

四、設(shè)備掃描與連接

             //開啟藍(lán)牙功能
             HBluetooth.getInstance().enableBluetooth()

完成了前面的步驟后,就來掃藍(lán)牙設(shè)備。要選好是經(jīng)典藍(lán)牙還是低功耗藍(lán)牙。找到設(shè)備后,連上它。一切搞定了,就可以跟設(shè)備聊天了。這整個操作就是圍著連接和交流轉(zhuǎn)的。

我操作過程中遇到點(diǎn)麻煩,像設(shè)備老斷線、數(shù)據(jù)傳得慢這些。這事兒挺鬧心的,但也讓我更懂藍(lán)牙這行的門道。做這個項(xiàng)目就是想讓大家以后遇到這些情況能更快解決。

五、持續(xù)優(yōu)化與維護(hù)

     //請?zhí)顚懩阕约涸O(shè)備的UUID
        //低功耗藍(lán)牙才需要如下配置BleConfig,經(jīng)典藍(lán)牙不需要new HBluetooth.BleConfig()
        HBluetooth.BleConfig bleConfig = new HBluetooth.BleConfig();
        bleConfig.withServiceUUID("0000fe61-0000-1000-8000-00805f9b34fb")
                 .withWriteCharacteristicUUID("0000fe61-0000-1000-8000-00805f9b34fb")
                 .withNotifyCharacteristicUUID("0000fe61-0000-1000-8000-00805f9b34fb")
                //命令長度大于20個字節(jié)時是否分包發(fā)送,默認(rèn)false,分包時可以調(diào)兩參方法設(shè)置包之間發(fā)送間隔
                //.splitPacketToSendWhenCmdLenBeyond(false)
                //useCharacteristicDescriptor 默認(rèn)false
                //.useCharacteristicDescriptor(false)
                .setMtu(200, new BleMtuChangedCallback() {
                    @Override
                    public void onSetMTUFailure(int realMtuSize, BluetoothException bleException) {
                        Log.i(TAG, "bleException:" + bleException.getMessage() + "  realMtuSize:" + realMtuSize);
                    }
                    @Override
                    public void onMtuChanged(int mtuSize) {
                        Log.i(TAG, "Mtu set success,mtuSize:" + mtuSize);
                    }
                });
     //低功耗藍(lán)牙才需要調(diào)setBleConfig
	HBluetooth.getInstance().setBleConfig(bleConfig);

一直都在給這個項(xiàng)目找bug還升級。前陣子有個哥們兒給我提出了第一個問題,心里還挺激動,也感覺這玩意兒還是挺有用的。咱這框架雖然不是頂級的,但我會繼續(xù)調(diào)整,保證更多新手能靠它學(xué)好。

咱們得相信,隨著時間發(fā)展,藍(lán)牙技術(shù)肯定會越做越好,這個體系也會越來越完善。大家都來給些建議,讓我們一起把項(xiàng)目做得更棒。畢竟,開源就是要大家一起來分享和幫忙,大家齊心協(xié)力,這個框架才能更好地幫到每個開發(fā)者。

           HBluetooth.getInstance()
                .scan(type, new ScanCallBack() {
            @Override
            public void onScanStart() {
                Log.i(TAG, "開始掃描");
            }
            @Override
            public void onScanning() {
                Log.i(TAG, "掃描中");
            }
            @Override
            public void one rror(int errorType, String errorMsg) {
            }
            @Override
            public void onScanFinished(List bluetoothDevices) {
                Log.i(TAG, "掃描結(jié)束");
                if (bluetoothDevices != null && bluetoothDevices.size() > 0) {
                    list.clear();
                    list.addAll(bluetoothDevices);
                    adapter.notifyDataSetChanged();
                }
            }
        });
或者,如果你想在第一步操作后直接進(jìn)行掃描,則可以這樣調(diào)用:
        HBluetooth.getInstance()
                .enableBluetooth()
                .scan(type, new ScanCallBack() {
            @Override
            public void onScanStart() {
                Log.i(TAG, "開始掃描");
            }
            @Override
            public void onScanning() {
                Log.i(TAG, "掃描中");
            }
            @Override
            public void one rror(int errorType, String errorMsg) {
            }
            @Override
            public void onScanFinished(List bluetoothDevices) {
                Log.i(TAG, "掃描結(jié)束");
                if (bluetoothDevices != null && bluetoothDevices.size() > 0) {
                    list.clear();
                    list.addAll(bluetoothDevices);
                    adapter.notifyDataSetChanged();
                }
            }
        });

發(fā)表評論