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 43fc1c2..f0b56ee 100644 --- a/app/src/main/java/com/gamedog/vididin/main/MainActivity.kt +++ b/app/src/main/java/com/gamedog/vididin/main/MainActivity.kt @@ -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(), 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) + } + }) + } } diff --git a/app/src/main/java/com/gamedog/vididin/manager/NotificationController.kt b/app/src/main/java/com/gamedog/vididin/manager/NotificationController.kt index 9da34a7..56100f7 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/NotificationController.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/NotificationController.kt @@ -92,19 +92,21 @@ object NotificationController { ) return runCatching { suspendCancellableCoroutine { 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) + } } } } diff --git a/base/src/main/java/com/remax/base/ext/NotificationPermissionExt.kt b/base/src/main/java/com/remax/base/ext/NotificationPermissionExt.kt index 8305860..67efea1 100644 --- a/base/src/main/java/com/remax/base/ext/NotificationPermissionExt.kt +++ b/base/src/main/java/com/remax/base/ext/NotificationPermissionExt.kt @@ -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 以下版本默认有权限,但需要检查系统设置 diff --git a/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt b/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt index 672bb25..5754ba8 100644 --- a/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt +++ b/core/architecture/src/main/java/com/ama/core/architecture/util/AndroidUtil.kt @@ -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() { } + + + } \ No newline at end of file diff --git a/notification/src/main/java/com/remax/notification/newUtil/NotificationUtil.kt b/notification/src/main/java/com/remax/notification/newUtil/NotificationUtil.kt index d1f4a58..8918b24 100644 --- a/notification/src/main/java/com/remax/notification/newUtil/NotificationUtil.kt +++ b/notification/src/main/java/com/remax/notification/newUtil/NotificationUtil.kt @@ -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))