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

View file

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

View file

@ -1,6 +1,7 @@
package eu.m724.bt.code package eu.m724.bt.code
import android.Manifest import android.Manifest
import android.annotation.SuppressLint
import android.bluetooth.BluetoothAdapter import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothManager import android.bluetooth.BluetoothManager
import android.bluetooth.le.BluetoothLeScanner import android.bluetooth.le.BluetoothLeScanner
@ -8,44 +9,44 @@ import android.bluetooth.le.ScanCallback
import android.bluetooth.le.ScanResult import android.bluetooth.le.ScanResult
import android.content.Context import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
import androidx.compose.runtime.snapshots.SnapshotStateList
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class BluetoothHelper( class BluetoothHelper(
val context: Context val context: Context,
val deviceList: SnapshotStateList<String>
) { ) {
private val bluetoothManager: BluetoothManager = private val bluetoothManager: BluetoothManager =
context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
private val bluetoothAdapter: BluetoothAdapter = private val bluetoothAdapter: BluetoothAdapter =
bluetoothManager.adapter bluetoothManager.adapter
private val bluetoothLeScanner: BluetoothLeScanner = private lateinit var bluetoothLeScanner: BluetoothLeScanner
bluetoothAdapter.bluetoothLeScanner
@Throws(SecurityException::class) @Throws(SecurityException::class)
private fun init() { fun init(): Int {
bluetoothLeScanner = bluetoothAdapter.bluetoothLeScanner
if (!bluetoothAdapter.isEnabled)
return 2
bluetoothLeScanner.startScan(scanCallback) bluetoothLeScanner.startScan(scanCallback)
System.out.println("scanning now")
return 0
} }
private fun onFailed(errorCode: Int) { private fun onFailed(errorCode: Int) {
} }
@SuppressLint("MissingPermission")
private fun addDevice(result: ScanResult) { private fun addDevice(result: ScanResult) {
if (ActivityCompat.checkSelfPermission( println("Found: ${result.device.name} (${result.device.address})")
context, CoroutineScope(Dispatchers.Main).launch {
Manifest.permission.BLUETOOTH_CONNECT deviceList.add(result.device.name)
) != 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(result.device.name)
} }
private val scanCallback: ScanCallback = private val scanCallback: ScanCallback =