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" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <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_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 <uses-feature
android:name="android.hardware.bluetooth_le" 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) { private val requiredPermissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
arrayOf( arrayOf(
Manifest.permission.BLUETOOTH_ADVERTISE, 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 { } else {
arrayOf( arrayOf(
Manifest.permission.BLUETOOTH, 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 { } 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 { setContent {
MaterialTheme { MaterialTheme {
Surface( Surface(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background color = MaterialTheme.colorScheme.background
) { ) {
PermissionDeniedScreen { requestPermissions() } PermissionDeniedScreen(
deniedPermissions = deniedPermissions.toList()
) { requestPermissions() }
} }
} }
} }
@ -291,8 +300,11 @@ class MainActivity : ComponentActivity() {
} }
@Composable @Composable
fun PermissionDeniedScreen(onRequestPermissions: () -> Unit) { fun PermissionDeniedScreen(
Log.d(TAG, "Showing permission denied screen") deniedPermissions: List<String>,
onRequestPermissions: () -> Unit
) {
Log.d(TAG, "Showing permission denied screen for permissions: $deniedPermissions")
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
@ -301,16 +313,25 @@ fun PermissionDeniedScreen(onRequestPermissions: () -> Unit) {
verticalArrangement = Arrangement.Center verticalArrangement = Arrangement.Center
) { ) {
Text( Text(
text = "Bluetooth permissions are required to use this app", text = "The following permissions are required:",
style = MaterialTheme.typography.bodyLarge, style = MaterialTheme.typography.bodyLarge,
textAlign = TextAlign.Center, 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( Button(
onClick = { onClick = {
Log.d(TAG, "Permission request button clicked") Log.d(TAG, "Permission request button clicked")
onRequestPermissions() onRequestPermissions()
} },
modifier = Modifier.padding(top = 16.dp)
) { ) {
Text("Grant Permissions") Text("Grant Permissions")
} }