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.vididin.VidiConst
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.adapter.MainTabsAdapter
import com.gamedog.vididin.adapter.MainViewPagerAdapter
@ -224,16 +225,18 @@ class MainActivity : AppViewsActivity<ViewBinding, UiState, ViewModel>(), OnTabS
}
private fun checkNotifyPermissionAndStartService() {
NotificationController.requestNotificationPermissionAsAsync(
context = this,
lifecycleScope = lifecycleScope,
activityLauncher = activityLauncher!!,
position = "Appstart",
onGrantedOnlyUnauthorized = { isGranted->
if(isGranted){
NotificationKeepAliveServiceManager.startKeepAliveService(this)
}
})
if (GuideManager.instance().getCurGuideIndex() > GUIDE_INDEX_ZERO) {
NotificationController.requestNotificationPermissionAsAsync(
context = this,
lifecycleScope = lifecycleScope,
activityLauncher = activityLauncher!!,
position = "Appstart",
onGrantedOnlyUnauthorized = { isGranted->
if(isGranted){
NotificationKeepAliveServiceManager.startKeepAliveService(this)
}
})
}
}

View File

@ -92,19 +92,21 @@ object NotificationController {
)
return runCatching {
suspendCancellableCoroutine<Boolean> { continuation ->
context.requestNotificationPermission(activityLauncher!!) { isGranted ->
DataReportManager.reportData(
"Notific_Allow_Result", mapOf(
"Notific_Allow_Position" to "Appstart",
"Result" to if (isGranted) "allow" else if (ActivityCompat.shouldShowRequestPermissionRationale(
context, Manifest.permission.POST_NOTIFICATIONS
)
) "denied" else "deined_forever"
if (SpUtil.instance().getInt(SpUtil.KEY_GUIDE_HAS_SHOW) >= 4) {
context.requestNotificationPermission(activityLauncher!!) { isGranted ->
DataReportManager.reportData(
"Notific_Allow_Result", mapOf(
"Notific_Allow_Position" to "Appstart",
"Result" to if (isGranted) "allow" else if (ActivityCompat.shouldShowRequestPermissionRationale(
context, Manifest.permission.POST_NOTIFICATIONS
)
) "denied" else "deined_forever"
)
)
)
onGrantedOnlyUnauthorized.invoke(isGranted)
if (continuation.isActive) {
continuation.resume(isGranted)
onGrantedOnlyUnauthorized.invoke(isGranted)
if (continuation.isActive) {
continuation.resume(isGranted)
}
}
}
}

View File

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

View File

@ -1,5 +1,6 @@
package com.ama.core.architecture.util
import android.Manifest
import android.content.Context
import android.content.Intent
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.databinding.LayoutToastCenterBinding
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.gson.Gson
import com.google.gson.reflect.TypeToken
@ -162,7 +164,13 @@ class AndroidUtil private constructor() {
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 {
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.NotificationManagerCompat
import com.ama.core.architecture.BaseApp
import com.ama.core.architecture.util.AndroidUtil
import com.ama.core.architecture.util.permission.PermissionUtil
import com.gamedog.statisticreporter.StatisticUtil
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(),
notification: Notification,
channelName: String,
importance: Int = NotificationManager.IMPORTANCE_DEFAULT) {
if (!isNotificationsEnabled()) {
StatisticUtil.reportEvents(StatisticUtil.KEY_Push_Show)
PermissionUtil.checkPermission(Manifest.permission.POST_NOTIFICATIONS, object : PermissionUtil.ICallback() {
AndroidUtil.requestNotifyPermission(object : PermissionUtil.ICallback() {
override fun onAllGranted() {
doShowNotification(notificationId, notification, channelName, importance)
StatisticUtil.reportEvents(StatisticUtil.KEY_Push_Request_Result, mapOf("Push_Result" to 1))