Notification学习

来源:互联网 发布:中联软件 编辑:程序博客网 时间:2024/05/17 23:38
 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);            }        });    }}
0 0