guide完成前 不打开通知

This commit is contained in:
renhaoting 2026-01-12 20:15:40 +08:00
parent 383b0a2be3
commit ed5eec84af
5 changed files with 54 additions and 27 deletions

View File

@ -24,6 +24,7 @@ import com.blankj.utilcode.util.ActivityUtils
import com.gamedog.statisticreporter.StatisticUtil import com.gamedog.statisticreporter.StatisticUtil
import com.gamedog.vididin.VidiConst import com.gamedog.vididin.VidiConst
import com.gamedog.vididin.VidiConst.GUIDE_INDEX_GIFT import com.gamedog.vididin.VidiConst.GUIDE_INDEX_GIFT
import com.gamedog.vididin.VidiConst.GUIDE_INDEX_ZERO
import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.adapter.MainTabsAdapter import com.gamedog.vididin.adapter.MainTabsAdapter
import com.gamedog.vididin.adapter.MainViewPagerAdapter import com.gamedog.vididin.adapter.MainViewPagerAdapter
@ -224,6 +225,7 @@ class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabS
} }
private fun checkNotifyPermissionAndStartService() { private fun checkNotifyPermissionAndStartService() {
if (GuideManager.instance().getCurGuideIndex() > GUIDE_INDEX_ZERO) {
NotificationController.requestNotificationPermissionAsAsync( NotificationController.requestNotificationPermissionAsAsync(
context = this, context = this,
lifecycleScope = lifecycleScope, lifecycleScope = lifecycleScope,
@ -235,6 +237,7 @@ class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabS
} }
}) })
} }
}
private fun reportStatistics(intent: Intent, isFromNewIntent: Boolean) { private fun reportStatistics(intent: Intent, isFromNewIntent: Boolean) {

View File

@ -92,6 +92,7 @@ object NotificationController {
) )
return runCatching { return runCatching {
suspendCancellableCoroutine<Boolean> { continuation -> suspendCancellableCoroutine<Boolean> { continuation ->
if (SpUtil.instance().getInt(SpUtil.KEY_GUIDE_HAS_SHOW) >= 4) {
context.requestNotificationPermission(activityLauncher!!) { isGranted -> context.requestNotificationPermission(activityLauncher!!) { isGranted ->
DataReportManager.reportData( DataReportManager.reportData(
"Notific_Allow_Result", mapOf( "Notific_Allow_Result", mapOf(
@ -108,6 +109,7 @@ object NotificationController {
} }
} }
} }
}
}.getOrDefault(false) }.getOrDefault(false)
} }
return true return true

View File

@ -3,6 +3,7 @@ package com.remax.base.ext
import android.Manifest import android.Manifest
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
@ -11,6 +12,7 @@ import androidx.core.app.ActivityCompat
import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat
import com.remax.base.utils.ActivityLauncher import com.remax.base.utils.ActivityLauncher
/** /**
* 检查是否可以发送通知权限 + 系统设置 * 检查是否可以发送通知权限 + 系统设置
*/ */
@ -32,6 +34,11 @@ fun Context.canSendNotification(): Boolean {
return hasPermission && isEnabled return hasPermission && isEnabled
} }
private fun isGuideFinish(context: Context): Boolean {
val sharedPref: SharedPreferences = context.getSharedPreferences("VidiDin_Common", Context.MODE_PRIVATE)
return sharedPref.getInt("KEY_GUIDE_STATE", 0) >= 4
}
/** /**
* 请求通知权限 * 请求通知权限
* @param launcher ActivityLauncher 实例 * @param launcher ActivityLauncher 实例
@ -43,10 +50,12 @@ fun Context. requestNotificationPermission(
) { ) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Android 13+ 需要请求通知权限 // Android 13+ 需要请求通知权限
if (isGuideFinish(this)) {
launcher.launch(arrayOf(Manifest.permission.POST_NOTIFICATIONS)) { permissions -> launcher.launch(arrayOf(Manifest.permission.POST_NOTIFICATIONS)) { permissions ->
val isGranted = permissions[Manifest.permission.POST_NOTIFICATIONS] ?: false val isGranted = permissions[Manifest.permission.POST_NOTIFICATIONS] ?: false
result(isGranted) result(isGranted)
} }
}
} else { } else {
// Android 13 以下版本默认有权限,但需要检查系统设置 // Android 13 以下版本默认有权限,但需要检查系统设置
result(canSendNotification()) result(canSendNotification())

View File

@ -1,5 +1,6 @@
package com.ama.core.architecture.util package com.ama.core.architecture.util
import android.Manifest
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
@ -32,6 +33,7 @@ import com.ama.core.architecture.BaseApp
import com.ama.core.architecture.R import com.ama.core.architecture.R
import com.ama.core.architecture.databinding.LayoutToastCenterBinding import com.ama.core.architecture.databinding.LayoutToastCenterBinding
import com.ama.core.architecture.util.ResUtil.dp import com.ama.core.architecture.util.ResUtil.dp
import com.ama.core.architecture.util.permission.PermissionUtil
import com.google.android.gms.ads.identifier.AdvertisingIdClient import com.google.android.gms.ads.identifier.AdvertisingIdClient
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
@ -162,7 +164,13 @@ class AndroidUtil private constructor() {
return NotificationManagerCompat.from(BaseApp.appContext()).areNotificationsEnabled() return NotificationManagerCompat.from(BaseApp.appContext()).areNotificationsEnabled()
} }
fun requestNotifyPermission(callback: PermissionUtil.ICallback) {
if (SpUtil.instance().getInt(SpUtil.KEY_GUIDE_HAS_SHOW) >= 4) {
PermissionUtil.checkPermission(Manifest.permission.POST_NOTIFICATIONS, callback)
} else {
callback.onAllRejected()
}
}
fun getAppVersionInfo(): String { fun getAppVersionInfo(): String {
return try { return try {
@ -308,4 +316,7 @@ class AndroidUtil private constructor() {
} }
} }

View File

@ -14,6 +14,7 @@ import androidx.annotation.RequiresPermission
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat
import com.ama.core.architecture.BaseApp import com.ama.core.architecture.BaseApp
import com.ama.core.architecture.util.AndroidUtil
import com.ama.core.architecture.util.permission.PermissionUtil import com.ama.core.architecture.util.permission.PermissionUtil
import com.gamedog.statisticreporter.StatisticUtil import com.gamedog.statisticreporter.StatisticUtil
import com.remax.notification.NotifyConst import com.remax.notification.NotifyConst
@ -453,13 +454,14 @@ class NotificationUtil private constructor() {
@RequiresPermission(Manifest.permission.POST_NOTIFICATIONS)
private fun showNotification(notificationId: Int = System.currentTimeMillis().toInt(), private fun showNotification(notificationId: Int = System.currentTimeMillis().toInt(),
notification: Notification, notification: Notification,
channelName: String, channelName: String,
importance: Int = NotificationManager.IMPORTANCE_DEFAULT) { importance: Int = NotificationManager.IMPORTANCE_DEFAULT) {
if (!isNotificationsEnabled()) { if (!isNotificationsEnabled()) {
StatisticUtil.reportEvents(StatisticUtil.KEY_Push_Show) StatisticUtil.reportEvents(StatisticUtil.KEY_Push_Show)
PermissionUtil.checkPermission(Manifest.permission.POST_NOTIFICATIONS, object : PermissionUtil.ICallback() { AndroidUtil.requestNotifyPermission(object : PermissionUtil.ICallback() {
override fun onAllGranted() { override fun onAllGranted() {
doShowNotification(notificationId, notification, channelName, importance) doShowNotification(notificationId, notification, channelName, importance)
StatisticUtil.reportEvents(StatisticUtil.KEY_Push_Request_Result, mapOf("Push_Result" to 1)) StatisticUtil.reportEvents(StatisticUtil.KEY_Push_Request_Result, mapOf("Push_Result" to 1))