Notification学习

本文介绍了如何使用PendingIntent创建Android通知,包括默认通知和自定义通知的实现过程。PendingIntent作为Intent的一种包装形式,用于处理不确定何时触发的意图,特别适合用于通知中,确保即使在触发应用未运行的情况下也能正确执行跳转。
摘要由CSDN通过智能技术生成
 PendingIntent可以看做是对Intent的包装,通过名称可以看出PendingIntent用于处理即将发生的意图,而Intent用来处理马上发生的意图。而对于通知来说,它是一个系统级的全局的通知,并不确定这个意图被执行的时间。当在应用外部执行PendingIntent时,因为它保存了触发App的Context,使得外部App可以如果当前App一样执行PendingIntent里的Intent,就算执行时触发通知的App已经不存在了,也能通过存在PendingIntent里的Context照常执行Intent,并且还可以处理Intent所带来的额外的信息
 PendingIntent提供了多个静态的getXxx()方法,用于获得适用于不同场景的PendingIntent对象。一般需要传递的几个参数都很常规,只介绍一个flag参数,用于标识PendingIntent的构造选择:

FLAG_CANCEL_CURRENT:如果构建的PendingIntent已经存在,则取消前一个,重新构建一个。
FLAG_NO_CREATE:如果前一个PendingIntent已经不存在了,将不再构建它。
FLAG_ONE_SHOT:表明这里构建的PendingIntent只能使用一次。
FLAG_UPDATE_CURRENT:如果构建的PendingIntent已经存在,则替换它,常用。

默认通知步骤简述:
1.创建一个manager
2.创建一个builder用于设置通知的属性
3.设置builder的属性(标题,大图标,小图标,内容等)
4.创建一个pendingIntent
自定义通知步骤:
1.创建remoteviews对象
2.设置remoteviews对象的属性
3.设置自定义通知的点击响应事件,创建一个pendingintent,设置并关联响应事件
4.根据builder创建notification
5.利用manager将通知显示出来

public class MainActivity extends AppCompatActivity {
    private  Button defaultStyle;
    private Button cancelButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        defaultStyle = (Button) findViewById(R.id.default_style);
        defaultStyle.setOnClickListener(new View.OnClickListener() {
            @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
            @Override
            public void onClick(View view) {
//                首先需要一个manager
                NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//                创建一个builder用于设置通知的属性
                Notification.Builder builder = new Notification.Builder(MainActivity.this);
//                设置builder的属性
//                设置大图标
                Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
                builder.setLargeIcon(bitmap);
//                设置消息来时的提示
                builder.setTicker("通知来了");
//                设置通知标题
                builder.setContentTitle("紧急通知");
//                设置通知内容
                builder.setContentText("今天放假");
//                设置小图标
                builder.setSmallIcon(R.mipmap.ic_launcher);
                builder.setAutoCancel(true);
//                创建一个跳转Intent
                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//                第一个参数:上下文对象  第二个参数:返回的状态码    打三个参数:一个intent,通常是跳转的intent
//                第四个参数:是通知与页面的更新类型
                PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,100,intent,PendingIntent.FLAG_UPDATE_CURRENT);
                builder.setContentIntent(pendingIntent);

//                设置自定义通知
//                创建remoteviews对象
                RemoteViews views = new RemoteViews(getPackageName(),R.layout.notificationlayout);
//                设置remoteviews对象的属性
                views.setTextViewText(R.id.title,"喜马拉雅听书");
                views.setTextViewText(R.id.text,"姑娘你真是条汉子");
                builder.setContent(views);

//                设置自定义通知的点击响应事件
//                1.创建一个pendingintent
                Intent intent1 = new Intent(MainActivity.this,Main2Activity.class);
                PendingIntent pendingIntent1 = PendingIntent.getActivity(MainActivity.this,100,intent1,PendingIntent.FLAG_UPDATE_CURRENT);
//                2.设置并关联响应事件
                views.setOnClickPendingIntent(R.id.butinfo,pendingIntent1);


//                根据builder创建notification
                Notification notification = builder.build();
//                利用manager将通知显示出来

                manager.notify(100,notification);

            }
        });
        cancelButton = (Button) findViewById(R.id.cancel_notification);
        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//              1.  拿到manager
                NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//                2.取消通知
//                取消所有通知
                manager.cancelAll();
//                取消指定的通知,根据id号来确定对象
//                manager.cancel(110);
            }
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值