enable intent

This commit is contained in:
Minecon724 2024-05-18 13:51:20 +02:00
parent fe08d434a0
commit 6ca0e3d569
3 changed files with 82 additions and 32 deletions

View file

@ -4,18 +4,18 @@
<value>
<entry key="app">
<State>
<runningDeviceTargetSelectedWithDropDown>
<targetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="adb-6lib7t69autkdauc-vxlVsT._adb-tls-connect._tcp" />
<type value="VIRTUAL_DEVICE_PATH" />
<value value="$USER_HOME$/.android/avd/Pixel_3a_API_34_extension_level_7_x86_64.avd" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2024-05-17T14:54:32.741207568Z" />
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2024-05-18T10:28:26.053108340Z" />
</State>
</entry>
</value>

View file

@ -1,18 +1,33 @@
package eu.m724.bt
import android.Manifest
import android.annotation.SuppressLint
import android.app.Activity
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.bluetooth.le.BluetoothLeScanner
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.os.Handler
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultCallback
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.snapshots.SnapshotStateList
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.core.app.ActivityCompat
@ -27,12 +42,29 @@ class MainActivity : ComponentActivity() {
onPermissionGranted(granted)
}
private val btEnableActivityResult =
registerForActivityResult(
ActivityResultContracts.StartActivityForResult(),
ActivityResultCallback<ActivityResult> { result ->
if (result.resultCode != Activity.RESULT_OK) {
Toast.makeText(
applicationContext,
"you must enable bluetooth",
Toast.LENGTH_SHORT
).show()
finishAffinity()
}
}
)
private val deviceList = mutableStateListOf("a", "b", "c")
private fun bluetoothPermission() {
if (checkSelfPermission(
Manifest.permission.BLUETOOTH_SCAN
Manifest.permission.BLUETOOTH_CONNECT
) != PackageManager.PERMISSION_GRANTED
) {
requestPermission.launch(Manifest.permission.BLUETOOTH_SCAN)
requestPermission.launch(Manifest.permission.BLUETOOTH_CONNECT)
} else onPermissionGranted(true)
}
@ -40,7 +72,11 @@ class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
bluetoothHelper = BluetoothHelper(applicationContext)
bluetoothHelper = BluetoothHelper(applicationContext, deviceList)
Handler().postDelayed({
System.out.println("aded")
deviceList.add("f")
}, 1000)
setContent {
PicoBtAndroidTheme {
// A surface container using the 'background' color from the theme
@ -49,6 +85,13 @@ class MainActivity : ComponentActivity() {
color = MaterialTheme.colorScheme.background
) {
Greeting("Android")
LazyColumn (
modifier = Modifier.fillMaxWidth()
) {
items(deviceList) { item ->
Text(text = item)
}
}
}
}
}
@ -61,11 +104,17 @@ class MainActivity : ComponentActivity() {
}
private fun onPermissionGranted(granted: Boolean) {
if (!granted) {
Toast.makeText(
applicationContext,
if (granted) "yes!!!!!!!!" else "no :(",
"you must grant bluetooth permission",
Toast.LENGTH_SHORT
).show()
finishAffinity()
} else {
val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
btEnableActivityResult.launch(enableBtIntent)
}
}
}

View file

@ -1,6 +1,7 @@
package eu.m724.bt.code
import android.Manifest
import android.annotation.SuppressLint
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothManager
import android.bluetooth.le.BluetoothLeScanner
@ -8,44 +9,44 @@ import android.bluetooth.le.ScanCallback
import android.bluetooth.le.ScanResult
import android.content.Context
import android.content.pm.PackageManager
import androidx.compose.runtime.snapshots.SnapshotStateList
import androidx.core.app.ActivityCompat
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class BluetoothHelper(
val context: Context
val context: Context,
val deviceList: SnapshotStateList<String>
) {
private val bluetoothManager: BluetoothManager =
context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
private val bluetoothAdapter: BluetoothAdapter =
bluetoothManager.adapter
private val bluetoothLeScanner: BluetoothLeScanner =
bluetoothAdapter.bluetoothLeScanner
private lateinit var bluetoothLeScanner: BluetoothLeScanner
@Throws(SecurityException::class)
private fun init() {
fun init(): Int {
bluetoothLeScanner = bluetoothAdapter.bluetoothLeScanner
if (!bluetoothAdapter.isEnabled)
return 2
bluetoothLeScanner.startScan(scanCallback)
System.out.println("scanning now")
return 0
}
private fun onFailed(errorCode: Int) {
}
@SuppressLint("MissingPermission")
private fun addDevice(result: ScanResult) {
if (ActivityCompat.checkSelfPermission(
context,
Manifest.permission.BLUETOOTH_CONNECT
) != PackageManager.PERMISSION_GRANTED
) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return
println("Found: ${result.device.name} (${result.device.address})")
CoroutineScope(Dispatchers.Main).launch {
deviceList.add(result.device.name)
}
println(result.device.name)
}
private val scanCallback: ScanCallback =