<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_centerVertical=“true”
android:text=“过滤设备名为空的设备”
android:textColor=“@color/black” />
<androidx.appcompat.widget.SwitchCompat
android:id=“@+id/switch_device_name”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_alignParentEnd=“true”
android:theme=“@style/SwitchStyle”
tools:ignore=“UseSwitchCompatOrMaterialXml” />
<View
android:layout_width=“match_parent”
android:layout_height=“0.5dp”
android:background=“@color/line” />
<LinearLayout
android:layout_width=“match_parent”
android:layout_height=“60dp”
android:gravity=“center_vertical”
android:orientation=“horizontal”
android:padding=“16dp”>
<TextView
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“RSSI:”
android:textColor=“@color/black” />
<androidx.appcompat.widget.AppCompatSeekBar
android:id=“@+id/sb_rssi”
android:layout_width=“0dp”
android:layout_height=“wrap_content”
android:layout_marginStart=“12dp”
android:layout_marginEnd=“12dp”
android:layout_weight=“1”
android:max=“100”
android:min=“40”
android:progress=“100”
android:theme=“@style/SeekBarStyle” />
<TextView
android:id=“@+id/tv_rssi”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:text=“-100 dBm”
android:textColor=“@color/black” />
<View
android:layout_width=“match_parent”
android:layout_height=“0.5dp”
android:background=“@color/line” />
<TextView
android:id=“@+id/tv_close”
android:layout_width=“match_parent”
android:layout_height=“60dp”
android:foreground=“?attr/selectableItemBackground”
android:gravity=“center”
android:text=“关闭”
android:textColor=“@color/black” />
在styles.xml中增加如下样式:
布局有了,下面进入MainActivity中写代码。增加一个方法:
/**
- 显示扫描过滤弹窗
*/
@SuppressLint(“InflateParams”)
private fun showScanFilterDialog() = BottomSheetDialog(this, R.style.BottomSheetDialogStyle).apply {
setContentView(DialogScanFilterBinding.bind(View.inflate(context, R.layout.dialog_scan_filter, null)).apply {
switchDeviceName.setOnCheckedChangeListener { buttonView, isChecked -> }
sbRssi.setOnSeekBarChangeListener(object : OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {}
override fun onStartTrackingTouch(seekBar: SeekBar) {}
override fun onStopTrackingTouch(seekBar: SeekBar) {}
})
tvClose.setOnClickListener { dismiss() }
}.root)
window?.findViewById(R.id.design_bottom_sheet)?.setBackgroundColor(Color.TRANSPARENT)
}.show()
这里面有一个开关一个滑动条,开关用于确定过滤设备名称为null的设备。首先来看这个开关,这里应该要保存开关的状态,每次每一次设置也是比较麻烦的,因此可以用一个本地缓存记录下来,通过也可以记录滑动条的位置,保存信号值强度。
④ 过滤设置缓存
写缓存会用到什么?上下文参数,那么就可以弄一个全局的上下文,怎么弄?自定义Application,在com.llw.blekotlin包下新建一个BleApplication类,代码如下:
open class BleApplication : Application() {
companion object {
@SuppressLint(“StaticFieldLeak”)
lateini