소스 검색

1. Android高版本权限适配

bjb 3 달 전
부모
커밋
ef796659c4

+ 1 - 4
app/build.gradle.kts

@@ -1,6 +1,3 @@
-import java.io.FileInputStream
-import java.util.Properties
-
 plugins {
     alias(libs.plugins.android.application)
     alias(libs.plugins.kotlin.android)
@@ -19,7 +16,7 @@ android {
         minSdk = 24
         targetSdk = 36
         versionCode = 1
-        versionName = "0.0.20260126_2"
+        versionName = "0.0.20260128_1"
 
         testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
     }

+ 2 - 0
app/src/main/AndroidManifest.xml

@@ -9,6 +9,8 @@
     <uses-permission
         android:name="android.permission.READ_EXTERNAL_STORAGE"
         android:maxSdkVersion="32" />
+    <!--  通知权限  -->
+    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
 
 
     <application

+ 42 - 0
app/src/main/java/com/iscs/bozzys/ui/pages/compose/RuntimePermission.kt

@@ -0,0 +1,42 @@
+package com.iscs.bozzys.ui.pages.compose
+
+import android.Manifest
+import android.content.Context
+import android.os.Build
+import androidx.activity.compose.rememberLauncherForActivityResult
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.ui.platform.LocalContext
+import androidx.core.app.NotificationManagerCompat
+import com.iscs.bozzys.utils.LogUtil
+
+/**
+ * 校验通知是否使能
+ */
+fun Context.isNotificationEnabled(): Boolean {
+    return NotificationManagerCompat.from(this).areNotificationsEnabled()
+}
+
+/**
+ * 通知权限申请
+ */
+@Composable
+fun RequestNotificationPermission() {
+    val ctx = LocalContext.current
+    val launcher = rememberLauncherForActivityResult(contract = ActivityResultContracts.RequestPermission()) { granted ->
+        if (granted) {
+            LogUtil.d("NotificationPermission", "允许通知")
+        } else {
+            LogUtil.d("NotificationPermission", "拒绝通知")
+        }
+    }
+    // 执行通知权限的申请
+    LaunchedEffect(Unit) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+            if (!ctx.isNotificationEnabled()) {
+                launcher.launch(Manifest.permission.POST_NOTIFICATIONS)
+            }
+        }
+    }
+}

+ 2 - 0
app/src/main/java/com/iscs/bozzys/ui/pages/home/PageHome.kt

@@ -37,6 +37,7 @@ import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import androidx.lifecycle.viewmodel.compose.viewModel
 import com.iscs.bozzys.ui.common.PageBase
+import com.iscs.bozzys.ui.pages.compose.RequestNotificationPermission
 import com.iscs.bozzys.ui.pages.vm.VMHome
 
 /**
@@ -53,6 +54,7 @@ class PageHome : PageBase() {
 
     @Composable
     override fun GetViews(pv: PaddingValues) {
+        RequestNotificationPermission()
         Home(pv)
     }