package Ġcom . lo dz . android . core kt . ble Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . bluetooth . Bluetooth Adapter Ċ import Ġandroid . bluetooth . Bluetooth Device Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroidx . annotation . Requires Permission Ċ Ċ /** Ċ Ġ* Ġ ç®ĢåįķçļĦ èĵĿ çī Ļ è¾ ħ åĬ© ç±» Ċ Ġ* ĠCreated Ġby Ġz hou L Ġon Ġ 2 0 1 8 / 7 / 3 1 . Ċ Ġ*/ Ċ class ĠB le Simple Helper Ġprivate Ġconstructor () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġs Instance Ġ= ĠB le Simple Helper () ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget (): ĠB le Simple Helper Ġ= Ġs Instance ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ èĵĿ çī Ļ éĢĤ éħį åĻ¨ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Bluetooth Adapter : ĠBluetooth Adapter ? Ġ= ĠBluetooth Adapter . getDefault Adapter () ĊĠĠĠ Ġ/** Ġ èĵĿ çī Ļ æĲľç´¢ çĽĳåĲ¬ åĻ¨ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm B le Discovery Listener Ġ= ĠArrayList < B le Discovery Listener >() ĊĠĠĠ Ġ/** Ġ èĵĿ çī Ļ çĬ¶æĢģ çĽĳåĲ¬ åĻ¨ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm B le State Listener Ġ= ĠArrayList < B le State Listener >() ĊĠĠĠ Ġ/** Ġ èĵĿ çī Ļ å¹¿ æĴŃ æİ¥æĶ¶ åĻ¨ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm B le Receiver Ġ= ĠB le Receiver () ĊĊĠĠĠ Ġfun Ġget Bluetooth Adapter (): ĠBluetooth Adapter ? Ġ= Ġm Bluetooth Adapter ĊĊĠĠĠ Ġ/** Ġ æ³¨åĨĮ èĵĿ çī Ļ å¹¿ æĴŃ æİ¥æĶ¶ åĻ¨ Ġ*/ ĊĠĠĠ Ġfun Ġregister B le Receiver ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . addAction ( Bluetooth Device . ACTION _ FOUND )// Ġ èĵĿ çī Ļ æī«æıı æĹ¶ ï¼Į æī«æıı åĪ° ä»» ä¸Ģ è¿ľç¨ĭ èĵĿ çī Ļ è®¾å¤ĩ æĹ¶ ï¼Į ä¼ļ åıĳéĢģ æŃ¤ å¹¿ æĴŃ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . addAction ( Bluetooth Adapter . ACTION _ DIS COVERY _ STARTED )// Ġ èĵĿ çī Ļ æī«æıı è¿ĩç¨ĭ å¼Ģå§ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . addAction ( Bluetooth Adapter . ACTION _ DIS COVERY _ FINISHED )// Ġ èĵĿ çī Ļ æī«æıı è¿ĩç¨ĭ ç»ĵæĿŁ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . addAction ( Bluetooth Device . ACTION _ ACL _ DIS CONNECTED )// Ġ èĵĿ çī Ļ è®¾å¤ĩ æĸŃ å¼Ģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . addAction ( Bluetooth Adapter . ACTION _ STATE _ CHANGED )// Ġ èĵĿ çī Ļ çĬ¶æĢģ åıĺåĮĸ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . application Context . register Receiver ( mB le Receiver , Ġfilter ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ è§£ æ³¨åĨĮ èĵĿ çī Ļ å¹¿ æĴŃ æİ¥æĶ¶ åĻ¨ Ġ*/ ĊĠĠĠ Ġfun Ġunregister B le Receiver ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . application Context . unregister Receiver ( mB le Receiver ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ èĵĿ çī Ļ çļĦ çĬ¶æĢģ ĊĠĠĠĠ Ġ* Ġ åħ³éĹŃ ï¼ļ Bluetooth Adapter . STATE _ OFF ĊĠĠĠĠ Ġ* Ġ åħ³éĹŃ ä¸Ń ï¼ļ Bluetooth Adapter . STATE _ TUR NING _ OFF ĊĠĠĠĠ Ġ* Ġ æīĵå¼Ģ ï¼ļ Bluetooth Adapter . STATE _ ON ĊĠĠĠĠ Ġ* Ġ æīĵå¼Ģ ä¸Ń ï¼ļ Bluetooth Adapter . STATE _ TUR NING _ ON ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Requires Permission ( Manifest . permission . BL U ETO OTH ) ĊĠĠĠ Ġfun Ġget Bluetooth State (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Bluetooth Adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Bluetooth Adapter . state ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠBluetooth Adapter . STATE _ OFF ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġè®¾ç½® èĵĿ çī Ļ çĬ¶æĢģ æĺ¯åĲ¦ åĲ¯çĶ¨ [ enable ] Ġ*/ ĊĠĠĠ Ġ@ Requires Permission ( all Of Ġ= Ġ[ Manifest . permission . BL U ETO OTH , ĠManifest . permission . BL U ETO OTH _ ADMIN , ĠManifest . permission . BL U ETO OTH _ CONNECT ]) ĊĠĠĠ Ġfun Ġset Bluetooth State ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( get Bluetooth State () Ġ== ĠBluetooth Adapter . STATE _ ON Ġ&& Ġ! enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bluetooth Adapter ?. disable () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( get Bluetooth State () Ġ== ĠBluetooth Adapter . STATE _ OFF Ġ&& Ġenable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bluetooth Adapter ?. enable () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ èĵĿ çī Ļ æĺ¯åĲ¦ æīĵå¼Ģ Ġ*/ ĊĠĠĠ Ġ@ Requires Permission ( Manifest . permission . BL U ETO OTH ) ĊĠĠĠ Ġfun Ġis Bluetooth Enabled (): ĠBoolean Ġ= Ġm Bluetooth Adapter ?. isEnabled Ġ?: Ġfalse ĊĊĠĠĠ Ġ/** Ġ å¼Ģå§ĭ æī«æıı Ġ*/ ĊĠĠĠ Ġ@ Requires Permission ( all Of Ġ= Ġ[ Manifest . permission . BL U ETO OTH , ĠManifest . permission . BL U ETO OTH _ ADMIN , ĠManifest . permission . BL U ETO OTH _ SCAN ]) ĊĠĠĠ Ġfun Ġstart Discovery (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Bluetooth Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Bluetooth Adapter . isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Bluetooth Adapter . is Discover ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Bluetooth Adapter . start Discovery () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ åģľæŃ¢ æī«æıı Ġ*/ ĊĠĠĠ Ġ@ Requires Permission ( all Of Ġ= Ġ[ Manifest . permission . BL U ETO OTH , ĠManifest . permission . BL U ETO OTH _ ADMIN , ĠManifest . permission . BL U ETO OTH _ SCAN ]) ĊĠĠĠ Ġfun Ġcancel Discovery (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Bluetooth Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Bluetooth Adapter . isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Bluetooth Adapter . is Discover ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Bluetooth Adapter . cancel Discovery () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġæĺ¯åĲ¦ æŃ£åľ¨ æī«æıı Ġ*/ ĊĠĠĠ Ġ@ Requires Permission ( all Of Ġ= Ġ[ Manifest . permission . BL U ETO OTH , ĠManifest . permission . BL U ETO OTH _ SCAN ]) ĊĠĠĠ Ġfun Ġis Discover ing (): ĠBoolean Ġ= Ġm Bluetooth Adapter ?. is Discover ing Ġ?: Ġfalse ĊĊĠĠĠ Ġ/** Ġæ·»åĬł èĵĿ çī Ļ çĬ¶æĢģ çĽĳåĲ¬ åĻ¨ Ġ*/ ĊĠĠĠ Ġfun Ġadd State Listener ( listener : ĠB le State Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! mB le State Listener . contains ( listener )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm B le State Listener . add ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠåĪłéĻ¤ èĵĿ çī Ļ çĬ¶æĢģ çĽĳåĲ¬ åĻ¨ Ġ*/ ĊĠĠĠ Ġfun Ġremove State Listener ( listener : ĠB le State Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mB le State Listener . contains ( listener )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm B le State Listener . remove ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġæ·»åĬł èĵĿ çī Ļ æĲľç´¢ çĽĳåĲ¬ åĻ¨ Ġ*/ ĊĠĠĠ Ġfun Ġadd Discovery Listener ( listener : ĠB le Discovery Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! mB le Discovery Listener . contains ( listener )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm B le Discovery Listener . add ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠåĪłéĻ¤ èĵĿ çī Ļ æĲľç´¢ çĽĳåĲ¬ åĻ¨ Ġ*/ ĊĠĠĠ Ġfun Ġremove Discovery Listener ( listener : ĠB le Discovery Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mB le Discovery Listener . contains ( listener )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm B le Discovery Listener . remove ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ èĵĿ çī Ļ å¹¿ æĴŃ æİ¥æĶ¶ åĻ¨ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠB le Receiver Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġintent ?. action ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ== Ġnull Ġ|| Ġaction . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠBluetooth Adapter . ACTION _ STATE _ CHANGED ) Ġ{// Ġ èĵĿ çī Ļ çĬ¶æĢģ åıĺåĮĸ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġintent . getInt Extra ( Bluetooth Adapter . EXTRA _ STATE , ĠBluetooth Adapter . STATE _ OFF ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġm B le State Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on StateChange ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠBluetooth Adapter . ACTION _ DIS COVERY _ STARTED ) Ġ{// Ġ èĵĿ çī Ļ æī«æıı è¿ĩç¨ĭ å¼Ģå§ĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġm B le Discovery Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onStart Discovery () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠBluetooth Adapter . ACTION _ DIS COVERY _ FINISHED ) Ġ{// Ġ èĵĿ çī Ļ æī«æıı è¿ĩç¨ĭ ç»ĵæĿŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġm B le Discovery Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Finished Discovery () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠBluetooth Device . ACTION _ FOUND ) Ġ{// Ġ èĵĿ çī Ļ æī«æıı æĹ¶ ï¼Į æī«æıı åĪ° ä»» ä¸Ģ è¿ľç¨ĭ èĵĿ çī Ļ è®¾å¤ĩ æĹ¶ ï¼Į ä¼ļ åıĳéĢģ æŃ¤ å¹¿ æĴŃ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġintent . get Parcelable Extra < Bluetooth Device >( Bluetooth Device . EXTRA _ DEVICE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġm B le Discovery Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Found Device ( device ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠBluetooth Device . ACTION _ ACL _ DIS CONNECTED ) Ġ{// Ġ èĵĿ çī Ļ è®¾å¤ĩ æĸŃ å¼Ģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġm B le Discovery Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Device Disconnected () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }