安卓通知封装工具类兼容8.0以上版本

95 篇文章 0 订阅
//安卓在8.0对通知有比较大更新,旧的API在8.0以上版本失效,下面封装工具类方便使用


/**
 * @author zhudaihao
 * @date 2020-10-13
 * 通知工具类
 */
public class NotificationUtils {

    /**
     * 创建渠道兼容8.0以上版本
     *
     * @param channelId   渠道id
     * @param channelName 渠道名称
     * @param importance  重要性等级
     */
    public static void create(String channelId, String channelName, int importance, Context context) {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
            NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
            notificationManager.createNotificationChannel(channel);
        }
    }


    /**
     * 发送 通知
     *
     * @param channelId  渠道id
     * @param title      标题
     * @param text       内容
     * @param smallIcon  小图标
     * @param largeIcon  大图标
     * @param autoCancel 点击后关闭通知
     * @param id         唯一id
     * @param context    上下文
     * @param clickToActivity 点击通知跳转对应页面
     */
    public static void send(@NonNull String channelId, CharSequence title, CharSequence text, int smallIcon, Bitmap largeIcon, boolean autoCancel, int id, Context context, Class<?> clickToActivity) {
        NotificationManager manager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
        setSend(channelId, title, text, smallIcon, largeIcon, autoCancel, id, context, manager,clickToActivity);
    }


    /**
     *  发送 引导开启消息通知
     *
     * @param channelId  渠道id
     * @param title      标题
     * @param text       内容
     * @param smallIcon  小图标
     * @param largeIcon  大图标
     * @param autoCancel 点击后关闭通知
     * @param id         唯一id
     * @param context    上下文
     * @param clickToActivity 点击通知跳转对应页面
     */
    public static void sendGuidance(@NonNull String channelId, CharSequence title, CharSequence text, int smallIcon, Bitmap largeIcon, boolean autoCancel, int id, Context context, Class<?> clickToActivity) {
        NotificationManager manager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
        //判断该app是否打开了通知,如果没有的话就打开手机设置页面
        if (!isNotificationEnabled(context)) {
            gotoSet(context);
        } else {
            //判断是否关闭对应渠道通知
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = manager.getNotificationChannel(channelId);
                channel.setShowBadge(true);//设置红色角标
                //引导设置开启对应的渠道消息通知
                if (channel.getImportance() == NotificationManager.IMPORTANCE_NONE) {
                    Log.e("zdh", "--------channel " + channel.toString());
                    Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
                    intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName());
                    intent.putExtra(Settings.EXTRA_CHANNEL_ID, channel.getId());
                    context.startActivity(intent);
                } else {
                    setSend(channelId, title, text, smallIcon, largeIcon, autoCancel, id, context, manager,clickToActivity);
                }
            } else {
                setSend(channelId, title, text, smallIcon, largeIcon, autoCancel, id, context, manager,clickToActivity);
            }


        }

    }

    /**
     * 发送消息配置代码
     *
     * @param channelId       渠道id
     * @param title           标题
     * @param text            内容
     * @param smallIcon       小图标
     * @param largeIcon       大图标
     * @param autoCancel      是否可以取消
     * @param id              唯一id
     * @param context         上下文
     * @param clickToActivity 点击通知跳转对应页面
     */
    private static void setSend(@NonNull String channelId, CharSequence title, CharSequence text, int smallIcon, Bitmap largeIcon, boolean autoCancel, int id, Context context, NotificationManager manager, Class<?> clickToActivity) {
        Intent intent = new Intent(context, clickToActivity);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, id, intent, id);

        Notification notification = new NotificationCompat.Builder(context, channelId)
                .setContentTitle(title)
                .setContentText(text)
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(smallIcon)
                .setLargeIcon(largeIcon)
                .setAutoCancel(autoCancel)
//                .setNumber(2)//设置红色角标数量
                .setContentIntent(pendingIntent)//设置广播接收者监听点击事件
                .build();
        manager.notify(id, notification);
    }


    /**
     * 判断是否开启 消息通知
     *
     * @param context
     * @return
     */
    private static boolean isNotificationEnabled(Context context) {
        boolean isOpened = false;
        try {
            isOpened = NotificationManagerCompat.from(context).areNotificationsEnabled();
        } catch (Exception e) {
            e.printStackTrace();
            isOpened = false;
        }
        return isOpened;

    }

    /**
     * 引导开启 消息通知功能
     *
     * @param context 上下文
     */
    private static void gotoSet(Context context) {
        Intent intent = new Intent();
        if (Build.VERSION.SDK_INT >= 26) {
            // android 8.0引导
            intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
            intent.putExtra("android.provider.extra.APP_PACKAGE", context.getPackageName());
        } else if (Build.VERSION.SDK_INT >= 21) {
            // android 5.0-7.0
            intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
            intent.putExtra("app_package", context.getPackageName());
            intent.putExtra("app_uid", context.getApplicationInfo().uid);
        } else {
            // 其他
            intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
            intent.setData(Uri.fromParts("package", context.getPackageName(), null));
        }
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);

    }
}
//使用
public class NotificationActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notification);

        //初始化 通知
        initNotification();
    }

    private void initNotification() {
        //聊天的通知
        String channelId = "chat";
        String channelName = "聊天消息";
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationUtils.create(channelId, channelName, importance,this);
    }





    //使用
    public void sendChatMsg(View view) {
        NotificationUtils.send("chat","收到一条聊天消息","今天中午吃什么?",           R.mipmap.music,BitmapFactory.decodeResource(getResources(), R.mipmap.vip_icon),true,1,this,NotificationActivity.class);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值