package com.cheng.blzb.manager import android.app.Activity import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager import android.app.Service import android.content.Context import android.content.Intent import android.net.Uri import android.provider.Settings import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.fragment.app.FragmentManager import com.cheng.blzb.R import com.cheng.blzb.ui.dialog.TipDialog import com.example.base.extensions.toast import com.example.base.utils.Utils object NotificationHelper { private val notificationManager by lazy { Utils.getApp().getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager } private const val DEFAULT_CHANNEL_ID = "default" private const val MESSAGE_CHANNEL_ID = "message" private var _notificationId = 1000 /** * 创建默认通知通道 */ fun createDefaultChannel() { createNotificationChannel(DEFAULT_CHANNEL_ID, "Default", NotificationManager.IMPORTANCE_DEFAULT) } /** * 消息通知 */ fun createMessageNotification(context: Context): Notification { val channelId = createNotificationChannel(MESSAGE_CHANNEL_ID, "Message", NotificationManager.IMPORTANCE_HIGH) val builder = NotificationCompat.Builder(context, channelId) return builder .setContentTitle("") .setContentText("") .setSmallIcon(R.mipmap.ic_launcher_icon) .setCategory(Notification.CATEGORY_MESSAGE) .build() } /** * 取消通知 */ fun cancelNotification(id: Int) { notificationManager.cancel(id) } /** * 创建通知通道 * * @param channelId * @param channelName * @return */ private fun createNotificationChannel(channelId: String, channelName: String, importance: Int): String { val channel = NotificationChannel(channelId, channelName, importance) notificationManager.createNotificationChannel(channel) return channelId } fun getNotificationId(): Int { return ++_notificationId } /** * 判断通知权限是否开启 */ fun isNotificationEnabled(context: Context): Boolean { return NotificationManagerCompat.from(context).areNotificationsEnabled() } /** * 通知被禁用时显示提示 */ fun showDisabledTip(activity: Activity, fm: FragmentManager) { val f = TipDialog.newInstance("请开启通知权限", "未避免错过重要消息,请在设置中打开【允许通知】", "去设置", "取消", cancelable = false) f.setOnSelectListener { if (it == DialogEnum.CLICK_CANCEL) { try { //8.0及以上 val intent = Intent() intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS) intent.putExtra(Settings.EXTRA_APP_PACKAGE, activity.packageName) activity.startActivity(intent) } catch (e: Exception) { val intent = Intent() intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) intent.setData(Uri.fromParts("package", activity.packageName, null)) activity.startActivity(intent) } } } f.show(fm, TipDialog::class.java.simpleName) } }