package Ġcom . th om ask u enne th . android bu ch . bluetooth scanner demo Ċ Ċ import Ġandroid . Manifest . permission . ACCESS _ F INE _ LOCATION Ċ import Ġandroid . app . Activity Ċ import Ġandroid . bluetooth . Bluetooth Adapter Ċ import Ġandroid . bluetooth . Bluetooth Device Ċ import Ġandroid . content .* Ċ import Ġandroid . content . pm . PackageManager . PERMISSION _ GRAN TED Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ private Ġconst Ġval ĠREQUEST _ ENABLE _ BL U ETO OTH Ġ= Ġ 1 2 3 Ċ private Ġconst Ġval ĠREQUEST _ F INE _ LOCATION Ġ= Ġ 3 2 1 Ċ Ċ private Ġenum Ġclass ĠBluetooth State Ġ{ ĊĠĠĠ ĠNot Available , ĠDisabled , ĠEnabled Ċ } Ċ Ċ class ĠBluetooth Scanner Demo Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġadapter Ġ= ĠBluetooth Adapter . getDefault Adapter () ĊĠĠĠ Ġprivate Ġval Ġreceiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Bluetooth Device . ACTION _ FOUND Ġ== Ġintent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġintent . get Parcelable Extra < Bluetooth Device >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBluetooth Device . EXTRA _ DEVICE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . append ( getString ( R . string . template , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice ?. name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice ?. address )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġstarted Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠIntent Filter ( Bluetooth Device . ACTION _ FOUND ) ĊĠĠĠĠĠĠĠ Ġregister Receiver ( receiver , Ġfilter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġunregister Receiver ( receiver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġstarted Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( get Bluetooth State () Ġ== ĠBluetooth State . Not Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv . text Ġ= ĠgetString ( R . string . not _ available ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Self Permission ( ACCESS _ F INE _ LOCATION ) Ġ!= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( ACCESS _ F INE _ LOCATION ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Devices () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ( started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. cancel Discovery () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstarted Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String ? >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ F INE _ LOCATION Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results . isNotEmpty () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results [ 0 ] Ġ== ĠPER MISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Devices () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ== ĠREQUEST _ ENABLE _ BL U ETO OTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Devices () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bluetooth State (): ĠBluetooth State Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġif Ġ( adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter . isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBluetooth State . Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBluetooth State . Disabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBluetooth State . Not Available ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠBluetooth State . Disabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenable Bt Intent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( Bluetooth Adapter . ACTION _ REQUEST _ ENABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( enable Bt Intent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ ENABLE _ BL U ETO OTH ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġstate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Devices () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġsb . append ( getString ( R . string . paired )) ĊĠĠĠĠĠĠĠ Ġadapter ?. bon ded Devices ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( getString ( R . string . template , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . address )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsb . append ("\ n ") ĊĠĠĠĠĠĠĠ Ġif Ġ( started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. cancel Discovery () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstarted Ġ= Ġadapter ?. start Discovery () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( getString ( R . string . others )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtv . text Ġ= Ġsb . toString () ĊĠĠĠ Ġ} Ċ }