Android 通知(Notification)初级用法和注意事项

前言

  Android通知栏,相对来说也是开发中的一项常用功能,其实相关的文章非常之多,但是对于其中的细节或者问题的整理并非那么清晰,以下便是自己在使用过程中的整理,希望对开发者能发挥一点作用.

Notofication 构建实例

    // 构建通知的实例 NotificationCompat兼容性优
 NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)

Notification 设置属性

        mBuilder.setContentTitle(title)//设置通知标题
                .setContentText(msg)//设置通知内容
                .setStyle(new NotificationCompat.BigTextStyle().setBigContentTitle(title).bigText(msg))//设置多内容的情况
                .setWhen(System.currentTimeMillis())//设置时间,一般系统时间
                .setAutoCancel(true)//***设置点击是否会被取消
                .setChannelId('PUSH_CHANNEL_ID')//***设置渠道ID
                .setContentIntent(getPendingIntent(context));//***设置通知的点击事件
        //设置通知自定义声音
        mBuilder.setSound(Uri.parse("android.resource://" + context.getPackageName() + "/" +'音频文件id');
        //设置通知默认声音
        mBuilder.setDefaults(Notification.DEFAULT_ALL);
            
        //设置通知icon
        if (targetSdkVersion >= 21 && Build.VERSION.SDK_INT >= 21){
            mBuilder.setSmallIcon(R.drawable.notification_small_icon);
            mBuilder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.notification_large_icon));
        } else {
            mBuilder.setSmallIcon(R.drawable.statusbar_icon);
        }             
  • 重点说明
    • setSmallIcon,必须设置属性,因为是手机状态栏上面的提示图标
      • 当targetSdkVersion >= 21 && Build.VERSION.SDK_INT >= 21 必须设置setLargeIcon,并且setSmallIcon设置为透明的图标,否则不显示
    • setStyle,当通知内容很多时采用BigTextStyle
    • setAutoCancel,该属性的作用域优很大的局限性
      • 作用将状态栏收起,并且通知移除
      • setContentIntent 当为通知或者广播的都起作用
      • 当处理自定义布局时不起作用

Notification 点击事件

 private static PendingIntent getPendingIntent(final Context context) {
        Intent intent = new Intent(context, NotificationBroadcastReceiver.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
        //通知extra内容处理 
        int ownID=1;//放在通知最外层,防止每次进来被初始化
        ownID++;
        requestCode = ownID;
        return PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    }
    
    
    private static PendingIntent getPendingIntent(final Context context) {
        Intent intent = new Intent(context, TargetActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
        //通知extra内容处理 
        int ownID=1;//放在通知最外层,防止每次进来被初始化
        ownID++;
        requestCode = ownID;
        return PendingIntent.getAcitivity(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    }

Notification 点击事件处理

    public class NotificationBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            //内容处理
        }
    
    }
  • 重点说明
    • 点击事件分为两类
      • PendingIntent.getBroadcast 通知处理
      • PendingIntent.getActivity 直接处理
    • 自定义布局处理点击事件时,需要手动收起状态栏和移除对应通知

Notification 创建通知管理器

        //创建通知管理器
        if (notificationManager == null) {
            notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        }
        
        //设置通知渠道
        if (Build.VERSION.SDK_INT >= 26) {
            NotificationChannel channel = new NotificationChannel('PUSH_CHANNEL_ID', context.getString(R.string.setting_channel_notification), NotificationManager.IMPORTANCE_DEFAULT);
            notificationManager.createNotificationChannel(channel);
        }
  • 重点说明
    • Build.VERSION.SDK_INT >= 26,需要设置createNotificationChannel,并且设置setChannelId

Notification 发送通知

        //发送通知
         notificationManager.notify(notificationId, mBuilder.build());
  • 重点说明
    • notificationId 用来发送和移除对应的通知

Notification 移除通知

        //移除通知
        if (notificationManager == null) {
            notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        }
        notificationManager.cancel(notificationId);

Notification 结束语

  基本上通知的初级用法就是这些用法,重点注意高版本适配和某些特殊用法.

Notification 参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值