Android - Notification通知详解

本文详细介绍Android通知机制,包括创建NotificationManager对象、构建Notification对象、设置点击通知后的意图、设定通知效果及布局等内容,并提供两种实现方式:建议使用的API16及以上版本的方法与API11以下的deprecated方法。
摘要由CSDN通过智能技术生成

整体步骤:
1、创建 NotificationManager对象对通知进行管理:
2、创建 Notification对象,用于存储通知所需的各种信息
3、设定点击通知后触发的意图(optional)
4、设定通知效果(声音、振动等,optional)
5、设定通知布局
6、取消通知

上述的每一步在代码中都有详细注释^_^

实现方法(两种方式):

/** 建议使用的方法,API 16及以上 */
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
protected void sendByUsingAPIAfter16() {

    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    // 下述操作与API 11以前的方法基本相同,查看文档把所有deprecated的方法改掉即可
    Notification.Builder builder = new Notification.Builder(
            SendNotificationActivity.this).
            setTicker("This is a test notification").
            setSmallIcon(R.drawable.ic_launcher);;

    Intent intent = new Intent(SendNotificationActivity.this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    PendingIntent pendingIntent = PendingIntent.getActivity(
SendNotificationActivity.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);

    Notification notification = builder.
            setContentIntent(pendingIntent).
            setContentTitle("Test Title").
            setContentText("Test Text").build();

    // 设置通知效果(optional)
//      setNotificationEffects(notification);

    manager.notify(1, notification);
}

//-----------------------------华丽的分界线------------------------------//

/** deprecated 不建议使用,API 11以下的方法 */
@SuppressWarnings("deprecation")
protected void sendByUsingOldAPI() {

    // 创建 NotificationManager对象对通知进行管理
    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    // 创建 Notification对象,用于存储通知所需的各种信息
    Notification notification = new Notification(
            R.drawable.ic_launcher,// 通知的图标
            "This is a test notification",// 通知的内容
            System.currentTimeMillis());// 通知被创建的时间,以毫秒为单位

    // 设置点击Notification触发事件
    Intent intent = new Intent(SendNotificationActivity.this, MainActivity.class);
    // 如果Intent要启动的Activity在栈顶,则不创建新的实例
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    // PendingIntent和Intent的区别:前者倾向于在某个合适的时机执行某个动作
    // 后者倾向于立即执行某个动作
    PendingIntent pendingIntent = PendingIntent.getActivity(
            SendNotificationActivity.this, 
            0, // request code,暂时没发现用途,据说通常传0即可
            intent, // 通过该Intent对象构建PendingIntent的意图
            PendingIntent.FLAG_UPDATE_CURRENT); // PendingIntent的行为,四个常量值,具体可以自行查看文档

    // 设定通知布局
    notification.setLatestEventInfo(SendNotificationActivity.this,
            "Test Title",// 标题内容
            "Test Text",// 正文内容
            pendingIntent);// 点击通知后触发的意图,可以为null

    // 设置通知效果(optional)
//      setNotificationEffects(notification);

    // 发送通知
    manager.notify(2, notification);
}

设置通知振动、铃声等效果:

/** 设置通知效果 */
private void setNotificationEffects(Notification notification) {
    // 设置通知声音
    Uri soundUri = Uri.fromFile(new File("/system/media/audio/ringtones/Basic_tone.ogg"));
    notification.sound = soundUri;

    // 设置通知振动
    // 需添加权限
    long[] vibrates = {1000,// 静止1秒
            1000,// 振动1秒
            1000,// 再静止1秒
            1000};// 再振动1秒,可以以此类推设置下去
    notification.vibrate = vibrates;

    // 设置LED灯闪烁
    notification.ledARGB = Color.GREEN;
    notification.ledOnMS = 1000;
    notification.ledOffMS = 1000;
    notification.flags = Notification.FLAG_SHOW_LIGHTS;

    // 不设置上述繁冗效果,可采用默认设置
    // 根据手机当前环境决定铃声、振动等
//      notification.defaults = Notification.DEFAULT_ALL;
}

要控制手机振动,需声明权限,在Manifest文件添加:

<uses-permission android:name="android.permission.VIBRATE"/><!-- 振动 -->

在上面的代码启动的Activity的onCreate()方法中,添加取消通知的代码:
cancel()方法中传入的就是要取消的通知的id

/** 取消通知 */
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.cancel(1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值