primary functions

This commit is contained in:
smayzy 2025-04-17 18:39:04 +02:00
parent 1dc65adce4
commit ccc3988c51
2 changed files with 93 additions and 6 deletions

View File

@ -5,6 +5,9 @@
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
<SelectionState runConfigName="MainActivity">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>

View File

@ -1,24 +1,108 @@
package ovh.smayzy.i2d_project_15_app
import android.Manifest
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.bluetooth.BluetoothSocket
import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Log
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import android.widget.Button
import android.widget.Toast
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import java.io.IOException
import java.util.*
class MainActivity : AppCompatActivity() {
private val tag = "MainActivity"
private val requestEnableBt = 1
private val deviceName = "HC-05"
private val sppUuid: UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")
private lateinit var bluetoothManager: android.bluetooth.BluetoothManager
private var bluetoothAdapter: BluetoothAdapter? = null
private var bluetoothSocket: BluetoothSocket? = null
private var isConnected = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
val connectBtn = findViewById<Button>(R.id.connect_btn)
bluetoothManager = getSystemService(BLUETOOTH_SERVICE) as android.bluetooth.BluetoothManager
bluetoothAdapter = bluetoothManager.adapter
if (bluetoothAdapter == null) {
Toast.makeText(this, "Bluetooth not supported by your device", Toast.LENGTH_LONG).show()
return
}
connectBtn.setOnClickListener {
Log.i("MainActivity", "connect-btn was clicked")
Toast.makeText(this, getString(R.string.connected), Toast.LENGTH_SHORT).show()
if (isConnected) {
Toast.makeText(this, "Already connected", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
connectToHC05()
}
}
private fun connectToHC05() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.BLUETOOTH_CONNECT), requestEnableBt)
return
}
} else {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), requestEnableBt)
}
}
val pairedDevices: Set<BluetoothDevice>? = bluetoothAdapter?.bondedDevices
val device = pairedDevices?.find { it.name == deviceName }
if (device == null) {
Toast.makeText(this, "HC-05 not found, try pairing it to your phone via bluetooth", Toast.LENGTH_LONG).show()
return
}
Thread {
try {
bluetoothSocket = device.createRfcommSocketToServiceRecord(sppUuid)
bluetoothSocket?.connect()
isConnected = true
runOnUiThread {
Toast.makeText(this, "Connected to HC-05", Toast.LENGTH_SHORT).show()
}
listenForData()
} catch (e: IOException) {
Log.e(tag, "Connection failed", e)
runOnUiThread {
Toast.makeText(this, "Connection failed: ${e.message}", Toast.LENGTH_LONG).show()
}
}
}.start()
}
private fun listenForData() {
val inputStream = bluetoothSocket?.inputStream ?: return
val buffer = ByteArray(64)
while (true) {
try {
val bytes = inputStream.read(buffer)
val message = String(buffer, 0, bytes)
Log.i(tag, "Received: $message")
} catch (e: IOException) {
Log.e(tag, "Can't read data", e)
break
}
}
}
}