Added needed permissions for Android 14 (API level 34 / U) and up.

This commit is contained in:
Joe Kearney 2025-02-10 17:48:56 -06:00
parent c9704c4bf4
commit 4af85426c7
2 changed files with 34 additions and 9 deletions

View file

@ -4,7 +4,11 @@
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-feature
android:name="android.hardware.bluetooth_le"

View file

@ -210,12 +210,17 @@ class MainActivity : ComponentActivity() {
private val requiredPermissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
arrayOf(
Manifest.permission.BLUETOOTH_ADVERTISE,
Manifest.permission.BLUETOOTH_CONNECT
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.ACCESS_FINE_LOCATION, // Required for BLE operations
Manifest.permission.ACCESS_COARSE_LOCATION // Required for BLE operations
)
} else {
arrayOf(
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
}
@ -238,14 +243,18 @@ class MainActivity : ComponentActivity() {
}
}
} else {
Log.w(TAG, "Some permissions denied: ${permissions.filter { !it.value }.keys}")
// Show which permissions were denied
val deniedPermissions = permissions.filter { !it.value }.keys
Log.w(TAG, "Some permissions denied: $deniedPermissions")
setContent {
MaterialTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
PermissionDeniedScreen { requestPermissions() }
PermissionDeniedScreen(
deniedPermissions = deniedPermissions.toList()
) { requestPermissions() }
}
}
}
@ -291,8 +300,11 @@ class MainActivity : ComponentActivity() {
}
@Composable
fun PermissionDeniedScreen(onRequestPermissions: () -> Unit) {
Log.d(TAG, "Showing permission denied screen")
fun PermissionDeniedScreen(
deniedPermissions: List<String>,
onRequestPermissions: () -> Unit
) {
Log.d(TAG, "Showing permission denied screen for permissions: $deniedPermissions")
Column(
modifier = Modifier
.fillMaxSize()
@ -301,16 +313,25 @@ fun PermissionDeniedScreen(onRequestPermissions: () -> Unit) {
verticalArrangement = Arrangement.Center
) {
Text(
text = "Bluetooth permissions are required to use this app",
text = "The following permissions are required:",
style = MaterialTheme.typography.bodyLarge,
textAlign = TextAlign.Center,
modifier = Modifier.padding(bottom = 16.dp)
modifier = Modifier.padding(bottom = 8.dp)
)
deniedPermissions.forEach { permission ->
Text(
text = "${permission.split(".").last()}",
style = MaterialTheme.typography.bodyMedium,
textAlign = TextAlign.Center,
modifier = Modifier.padding(vertical = 4.dp)
)
}
Button(
onClick = {
Log.d(TAG, "Permission request button clicked")
onRequestPermissions()
}
},
modifier = Modifier.padding(top = 16.dp)
) {
Text("Grant Permissions")
}