enable intent
This commit is contained in:
parent
fe08d434a0
commit
6ca0e3d569
3 changed files with 82 additions and 32 deletions
|
@ -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>
|
||||||
|
|
|
@ -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) {
|
||||||
Toast.makeText(
|
if (!granted) {
|
||||||
applicationContext,
|
Toast.makeText(
|
||||||
if (granted) "yes!!!!!!!!" else "no :(",
|
applicationContext,
|
||||||
Toast.LENGTH_SHORT
|
"you must grant bluetooth permission",
|
||||||
).show()
|
Toast.LENGTH_SHORT
|
||||||
|
).show()
|
||||||
|
finishAffinity()
|
||||||
|
} else {
|
||||||
|
val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
|
||||||
|
btEnableActivityResult.launch(enableBtIntent)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 =
|
||||||
|
|
Loading…
Reference in a new issue