From 8a442dbd545ce30dcf7ed175154d6dc8dbf217c3 Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Tue, 30 Dec 2025 15:36:09 +0800 Subject: [PATCH] =?UTF-8?q?app=E5=AE=89=E8=A3=85=EF=BC=8C=E5=85=85?= =?UTF-8?q?=E7=94=B5=20=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 20 ++++++++ .../com/gamedog/vididin/main/MainActivity.kt | 47 +++++++++++++++---- notification/src/main/AndroidManifest.xml | 1 + .../check/NotificationCheckController.kt | 2 + .../newUtil/events/AppInstallReceiver.kt | 22 +++++++++ .../newUtil/events/PowerConnectionReceiver.kt | 22 +++++++++ .../timing/NotificationTimingController.kt | 10 ++++ 7 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 notification/src/main/java/com/remax/notification/newUtil/events/AppInstallReceiver.kt create mode 100644 notification/src/main/java/com/remax/notification/newUtil/events/PowerConnectionReceiver.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 752ab30..301267f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -87,6 +87,26 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/gamedog/vididin/main/MainActivity.kt b/app/src/main/java/com/gamedog/vididin/main/MainActivity.kt index e1e7de6..39fbdb9 100644 --- a/app/src/main/java/com/gamedog/vididin/main/MainActivity.kt +++ b/app/src/main/java/com/gamedog/vididin/main/MainActivity.kt @@ -1,17 +1,17 @@ package com.gamedog.vididin.main import android.app.Activity +import android.content.BroadcastReceiver import android.content.Intent import android.content.IntentFilter -import com.ama.core.common.util.asSafe -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentManager -import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks -import androidx.viewpager2.widget.ViewPager2 import android.view.LayoutInflater import androidx.activity.addCallback import androidx.activity.viewModels +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks import androidx.lifecycle.lifecycleScope +import androidx.viewpager2.widget.ViewPager2 import com.ama.core.architecture.appBase.AppViewsActivity import com.ama.core.architecture.appBase.OnFragmentBackgroundListener import com.ama.core.architecture.ext.toast @@ -20,8 +20,8 @@ import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.bindViewPager2 import com.ama.core.architecture.util.setCommonNavigator import com.ama.core.architecture.util.setDataOrAdapter +import com.ama.core.common.util.asSafe import com.blankj.utilcode.util.ActivityUtils -import com.vididin.real.money.game.R import com.gamedog.vididin.VidiConst import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.adapter.MainTabsAdapter @@ -40,19 +40,21 @@ import com.remax.notification.builder.LANDING_NOTIFICATION_TITLE import com.remax.notification.check.NotificationCheckController import com.remax.notification.config.PushContent import com.remax.notification.controller.NotificationLandingController +import com.remax.notification.newUtil.events.AppInstallReceiver +import com.remax.notification.newUtil.events.PowerConnectionReceiver import com.remax.notification.service.NotificationKeepAliveServiceManager +import com.vididin.real.money.game.R import dagger.hilt.android.AndroidEntryPoint -import kotlin.getValue -import com.vididin.real.money.game.databinding.ActivityMainBinding as ViewBinding import com.gamedog.vididin.main.MainUiState as UiState import com.gamedog.vididin.main.MainViewModel as ViewModel - - +import com.vididin.real.money.game.databinding.ActivityMainBinding as ViewBinding @AndroidEntryPoint class MainActivity : AppViewsActivity(), OnTabStyleListener { + private lateinit var mAppInstallReceiver: AppInstallReceiver + private lateinit var mPowerReceiver: BroadcastReceiver private lateinit var activityLauncher: ActivityLauncher override val mViewModel: ViewModel by viewModels() private lateinit var navigatorAdapter: MainTabsAdapter @@ -91,6 +93,7 @@ class MainActivity : AppViewsActivity(), OnTabS mDateChangeReceiver = DateChangeReceiver() val filter = IntentFilter(Intent.ACTION_DATE_CHANGED) registerReceiver(mDateChangeReceiver, filter) + registerReceivers() onBackPressedDispatcher.addCallback(this@MainActivity) { if (mViewModel.canBack) { @@ -153,6 +156,7 @@ class MainActivity : AppViewsActivity(), OnTabS override fun onDestroy() { super.onDestroy() unregisterReceiver(mDateChangeReceiver) + unregisterReceivers() } override fun onTabIsDarkFont(isDarkFont: Boolean) { @@ -282,6 +286,29 @@ class MainActivity : AppViewsActivity(), OnTabS } } + private fun registerReceivers() { + mPowerReceiver = PowerConnectionReceiver() + val filter1 = IntentFilter().apply { + addAction(Intent.ACTION_POWER_CONNECTED) + addAction(Intent.ACTION_POWER_DISCONNECTED) + } + registerReceiver(mPowerReceiver, filter1) + + mAppInstallReceiver = AppInstallReceiver() + val filter2 = IntentFilter().apply { + addAction(Intent.ACTION_PACKAGE_ADDED) + addAction(Intent.ACTION_PACKAGE_REPLACED) + addAction(Intent.ACTION_PACKAGE_REMOVED) + addDataScheme("package") + } + registerReceiver(mAppInstallReceiver, filter2) + } + + + private fun unregisterReceivers() { + unregisterReceiver(mPowerReceiver) + unregisterReceiver(mAppInstallReceiver) + } companion object { diff --git a/notification/src/main/AndroidManifest.xml b/notification/src/main/AndroidManifest.xml index 9e5c464..d73c2fb 100644 --- a/notification/src/main/AndroidManifest.xml +++ b/notification/src/main/AndroidManifest.xml @@ -55,6 +55,7 @@ android:enabled="true" android:exported="false" android:foregroundServiceType="specialUse" /> + \ No newline at end of file diff --git a/notification/src/main/java/com/remax/notification/check/NotificationCheckController.kt b/notification/src/main/java/com/remax/notification/check/NotificationCheckController.kt index 84b82ba..8545266 100644 --- a/notification/src/main/java/com/remax/notification/check/NotificationCheckController.kt +++ b/notification/src/main/java/com/remax/notification/check/NotificationCheckController.kt @@ -49,6 +49,8 @@ class NotificationCheckController private constructor() { UNLOCK("local_push"), // 解锁通知 BACKGROUND("local_push"), // app后台 - for withdraw FIXTIMEPOINT("fix_time_point_push"), // 每日固定时间点 "9:10""12:10""13:10""19:10""21:00""22:30""23:30" + APPINSTALL("app_install"), + CHARGE("charge"), KEEPALIVE("local_push"), // 保活通知(无间隔限制) FCM("firebase_push"), // FCM 推送通知(无间隔限制) RESIDENT("top_notification") // 常驻(无间隔限制) diff --git a/notification/src/main/java/com/remax/notification/newUtil/events/AppInstallReceiver.kt b/notification/src/main/java/com/remax/notification/newUtil/events/AppInstallReceiver.kt new file mode 100644 index 0000000..5f3f909 --- /dev/null +++ b/notification/src/main/java/com/remax/notification/newUtil/events/AppInstallReceiver.kt @@ -0,0 +1,22 @@ +package com.remax.notification.newUtil.events + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import com.remax.notification.check.NotificationCheckController +import com.remax.notification.timing.NotificationTimingController + + + + +class AppInstallReceiver : BroadcastReceiver() { + + override fun onReceive(context: Context?, intent: Intent?) { + when (intent?.action) { + Intent.ACTION_PACKAGE_ADDED, Intent.ACTION_PACKAGE_REPLACED, Intent.ACTION_PACKAGE_REMOVED -> { + NotificationTimingController.getInstance() + .triggerNotificationIfAllowed(NotificationCheckController.NotificationType.APPINSTALL) + } + } + } +} \ No newline at end of file diff --git a/notification/src/main/java/com/remax/notification/newUtil/events/PowerConnectionReceiver.kt b/notification/src/main/java/com/remax/notification/newUtil/events/PowerConnectionReceiver.kt new file mode 100644 index 0000000..d55bb7d --- /dev/null +++ b/notification/src/main/java/com/remax/notification/newUtil/events/PowerConnectionReceiver.kt @@ -0,0 +1,22 @@ +package com.remax.notification.newUtil.events + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import com.remax.notification.check.NotificationCheckController +import com.remax.notification.timing.NotificationTimingController + +class PowerConnectionReceiver : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + when (intent.action) { + Intent.ACTION_POWER_CONNECTED -> { + NotificationTimingController.getInstance() + .triggerNotificationIfAllowed(NotificationCheckController.NotificationType.CHARGE) + } + Intent.ACTION_POWER_DISCONNECTED -> { + NotificationTimingController.getInstance() + .triggerNotificationIfAllowed(NotificationCheckController.NotificationType.CHARGE) + } + } + } +} \ No newline at end of file diff --git a/notification/src/main/java/com/remax/notification/timing/NotificationTimingController.kt b/notification/src/main/java/com/remax/notification/timing/NotificationTimingController.kt index 6260bc6..3b745f6 100644 --- a/notification/src/main/java/com/remax/notification/timing/NotificationTimingController.kt +++ b/notification/src/main/java/com/remax/notification/timing/NotificationTimingController.kt @@ -279,6 +279,8 @@ class NotificationTimingController private constructor() : LifecycleObserver { NotificationCheckController.NotificationType.FCM -> "FCM推送通知" NotificationCheckController.NotificationType.RESIDENT -> "常驻通知" NotificationCheckController.NotificationType.FIXTIMEPOINT -> "固定时间点通知" + NotificationCheckController.NotificationType.APPINSTALL -> "APP安装卸载" + NotificationCheckController.NotificationType.CHARGE -> "手机充电" } DataReportManager.reportData("Notific_Pull", mapOf("topic" to "localPush")) @@ -331,6 +333,14 @@ class NotificationTimingController private constructor() : LifecycleObserver { NotificationCheckController.NotificationType.FIXTIMEPOINT -> { showNotifyRandom() } + + NotificationCheckController.NotificationType.APPINSTALL -> { + showNotifyRandom() + } + + NotificationCheckController.NotificationType.CHARGE -> { + showNotifyRandom() + } }