feat: 添加通知设置功能,支持用户开启/关闭通知捕获,优化设置页功能显示,升级kotlin构建版本

This commit is contained in:
2025-11-28 11:37:33 +08:00
parent a2c5525a2e
commit 6b916a4a4b
8 changed files with 237 additions and 58 deletions

View File

@@ -18,7 +18,7 @@ android {
}
}
// <EFBFBD><EFBFBD>ʽͳһ Java / Kotlin <EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Capacitor <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>£<EFBFBD>Java 21<EFBFBD><EFBFBD>
// 显式统一 Java / Kotlin 的编译目标版本,保持与 Capacitor 生成配置一致(Java 21
compileOptions {
sourceCompatibility JavaVersion.VERSION_21
targetCompatibility JavaVersion.VERSION_21
@@ -52,4 +52,5 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
apply from: 'capacitor.build.gradle'
apply from: 'capacitor.build.gradle'

View File

@@ -1,9 +1,10 @@
package com.echo.app.notification
package com.echo.app.notification
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.provider.Settings
import androidx.core.app.NotificationManagerCompat
import com.getcapacitor.JSArray
import com.getcapacitor.JSObject
@@ -12,7 +13,7 @@ import com.getcapacitor.PluginCall
import com.getcapacitor.PluginMethod
import com.getcapacitor.annotation.CapacitorPlugin
// Capacitor <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>˱<EFBFBD>¶֪ͨȨ<EFBFBD>޼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>֪ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
// Capacitor 插件:向前端暴露通知权限、通知队列以及通知事件
@CapacitorPlugin(name = "NotificationBridge")
class NotificationBridgePlugin : Plugin() {
@@ -21,7 +22,7 @@ class NotificationBridgePlugin : Plugin() {
override fun load() {
super.load()
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NotificationBridgeService <EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ڹ㲥<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊ JS <EFBFBD>¼<EFBFBD>
// 监听 NotificationBridgeService 发送的应用内广播,并转发为 JS 事件
val filter = IntentFilter("com.echo.app.NOTIFICATION_POSTED")
notificationPostedReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
@@ -52,10 +53,19 @@ class NotificationBridgePlugin : Plugin() {
@PluginMethod
fun requestPermission(call: PluginCall) {
// <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 当前仅返回权限状态,实际的引导文案和跳转由前端控制
hasPermission(call)
}
@PluginMethod
fun openNotificationSettings(call: PluginCall) {
// 跳转到系统的“通知使用权”设置页面,引导用户手动开启监听权限
val intent = Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(intent)
call.resolve()
}
@PluginMethod
fun getPendingNotifications(call: PluginCall) {
val queue = NotificationStorage.list(context)
@@ -80,4 +90,4 @@ class NotificationBridgePlugin : Plugin() {
NotificationStorage.clear(context)
call.resolve()
}
}
}

View File

@@ -1,10 +1,13 @@
<resources>
<!-- <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD> Capacitor Ĭ<><C4AC><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> -->
<resources>
<!-- 应用主主题:为 Capacitor WebView 启用沉浸式状态栏和导航栏 -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
</style>
<!-- <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Activity ר<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣨Ŀǰ<EFBFBD><EFBFBD> AppTheme һ<>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><C9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3> -->
<!-- 启动 Activity 专用主题(当前与 AppTheme 一致,后续可单独定制) -->
<style name="AppTheme.NoActionBarLaunch" parent="AppTheme" />
</resources>

View File

@@ -1,12 +1,12 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.8.22'
ext.kotlin_version = '2.0.0'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.0.0'
classpath 'com.android.tools.build:gradle:8.4.2'
classpath 'com.google.gms:google-services:4.3.15'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
@@ -26,3 +26,5 @@ allprojects {
task clean(type: Delete) {
delete rootProject.buildDir
}