1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
package com.arslaancodes.zwznfreefit
import android.Manifest
import android.bluetooth.BluetoothDevice
import android.content.pm.PackageManager
import android.os.Bundle
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import android.content.Intent
class MainActivity : AppCompatActivity() {
private lateinit var bleManager: BleManager
private lateinit var statusText: TextView
private lateinit var scanButton: Button
private lateinit var deviceList: ListView
private val devices = mutableListOf<BluetoothDevice>()
private val deviceNames = mutableListOf<String>()
private lateinit var adapter: ArrayAdapter<String>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
window.decorView.systemUiVisibility = (
android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or android.view.View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
)
bleManager = BleManager(this)
statusText = findViewById(R.id.statusText)
scanButton = findViewById(R.id.scanButton)
deviceList = findViewById(R.id.deviceList)
adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, deviceNames)
deviceList.adapter = adapter
deviceList.setOnItemClickListener { _, _, position, _ ->
val device = devices[position]
statusText.text = "Connecting to ${device.name ?: device.address}..."
bleManager.connect(device) {
runOnUiThread {
val intent = Intent(this, DeviceActivity::class.java)
intent.putExtra("device_address", device.address)
startActivity(intent)
}
}
}
scanButton.setOnClickListener {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
arrayOf(
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.ACCESS_FINE_LOCATION
), 1)
return@setOnClickListener
}
devices.clear()
deviceNames.clear()
adapter.notifyDataSetChanged()
statusText.text = "Scanning..."
bleManager.scan { device ->
runOnUiThread {
if (devices.none { it.address == device.address }) {
devices.add(device)
deviceNames.add(device.name ?: device.address)
adapter.notifyDataSetChanged()
}
}
}
}
}
}
|