package Ġorg . bt el man . android . bluetooth . le . scanner . v 2 1 Ċ Ċ import Ġandroid . bluetooth . le . Scan Callback Ċ import Ġandroid . bluetooth . le . Scan Filter Ċ import Ġandroid . bluetooth . le . Scan Settings Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Parcel Uuid Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġorg . bt el man . android . bluetooth . le . scanner . B le Scanner Ċ import Ġkotlin . collections . ArrayList Ċ Ċ /** Ċ Ġ* ĠBluetooth Ġscanning Ġfor Ġabove Ġapi Ġ 2 1 Ċ Ġ*/ Ċ @ Requires Api ( 2 1 ) Ċ class ĠB le Scanner V 2 1 ( context : ĠContext ) Ġ: ĠB le Scanner ( context ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġstart Scan ( device Filter : ĠArrayList < Parcel Uuid >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscan Filter List Ġ= ĠArrayList < Scan Filter >() ĊĠĠĠĠĠĠĠ Ġdevice Filter . forEach Ġ{ Ġservice UUID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScan Filter . Builder (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Service Uuid ( service UUID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build (). also Ġ{ filter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Filter List . add ( filter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġscan Settings Ġ= ĠScan Settings . Builder (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Callback Type ( Scan Settings . CALLBACK _ TYPE _ ALL _ MATCH ES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Match Mode ( Scan Settings . MATCH _ MODE _ AGG RESS IVE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Scan Mode ( Scan Settings . SCAN _ MODE _ LOW _ LAT ENCY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Report Delay ( 0 ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġm Bluetooth Adapter . bluetooth Le Scanner . start Scan ( scan Filter List , Ġscan Settings , Ġscan Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop Scan () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Bluetooth Adapter . bluetooth Le Scanner . stop Scan ( scan Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġscan Callback Ġ= Ġobject Ġ: ĠScan Callback (){ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scan Result ( callback Type : ĠInt , Ġresult : Ġandroid . bluetooth . le . Scan Result ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Scan Result ( callback Type , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiscovered Devices [ it . device . address ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScan Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . device , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . rssi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . scan Record ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Dis covered Devices ?. invoke ( dis covered Devices ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Batch Scan Results ( results : ĠMutable List < android . bluetooth . le . Scan Result > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Batch Scan Results ( results ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiscovered Devices [ it . device . address ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScan Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . device , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . rssi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . scan Record ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Dis covered Devices ?. invoke ( dis covered Devices ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }