Notification 都不知道,还学什么 Android 应用开发
2017-07-28 21:10
411 查看
目录
Notification 的概念在 Notification 中启动 Activity
在 Notification 中启动 Service
实现 Action
Notification 的概念
是 Android 系统提供的一个功能,所以它独立于 Activity 存在 。 使用 NotificationManager 来调用。在 Notification 中启动 Activity
点击通知后,需要打开 Activity ,这时PendingIntent就派上了用处。PendingIntent getService 方法的四个参数 。
第一个参数 Context :传入需要的上下文环境 。
第二个参数 requestCode (int) : 相当于ID 。
第三个参数 Intent :将要被运行的 Activity
第四个参数 flags (int) :为一个Intent 创建单个 PendingIntent 时,传入 。 FLAG_UPDATE_CURRENT , FLAG_CANCLE_CURRENT 。
代码实现
1.创建PendingIntent
public static PendingIntent contentIntent(Context context){ Intent intent=new Intent(context, MainActivity.class); return PendingIntent.getActivity(context,PendingIntentFlag,intent,PendingIntent.FLAG_UPDATE_CURRENT); }
2.创建 Notification 有两种写法,第一种直接new出来,第二种是使用 NotificationBuilder ,然后创建 NotificationManager ,此步骤较多,但是更值得学习。
public static final int NOTIFICATION_ID= 1103; public static void remindUserBecauseCharing (Context context){ NotificationCompat.Builder notificationBuilder= new NotificationCompat.Builder(context) .setColor(ContextCompat.getColor(context,R.color.colorPrimary)) .setSmallIcon(R.drawable.ic_drink_notification) .setLargeIcon(largeIcon(context)) //设置标题 .setContentTitle(context.getString(R.string.app_name)) //设置内容 .setContentText("通知内容") //设置震动,声音 ,灯光 .setDefaults(DEFAULT_VIBRATE) //传入PendingIntent .setContentIntent(contentIntent(context)) .setAutoCancel(true); if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN){ //只有os4.1会使用heads up notificationBuilder.setPriority(Notification.PRIORITY_HIGH); } NotificationManager notificationManager=(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(NOTIFICATION_ID,notificationBuilder.build()); }
在 Notification 中启动 Service
其实在 Notification 中启动其它组件,只需要调用不同的 get 方法,例如调用 getService 。有人要问为什么只能用对应的 get 方法呢?你还记得吗?在写好 Intent 后还需要调用 startActivity 或者 startService ,而 PendingIntent 中传入了四个参数就OK了。 * 咱们用官方注释说话:*
* Retrieve a PendingIntent that will start a service, like calling * {@link Context#startService Context.startService()}. The start * arguments given to the service will come from the extras of the Intent. *
*意思是:传入的 Context 被用来调用startService。所以我们成功找到了 PendingIntent 的秘密。
实现 Action
通知组件还提供弱交互的功能 Action ,但是 Action 不可过多设置,两个已经是极限了。创建相应的 Action ,在这里作者设置了两个,
一个“ 我知道了 ”,点击后清除通知。另一个“ 我马上喝水 ”,执行另一部分逻辑(读者暂时不需要关注具体的逻辑)。
public static NotificationCompat.Action ignoreReminderAction(Context context){ //创建 Intent Intent intentToService = new Intent(context, WaterReminderIntentService.class); //给 Intent 加 action intentToService.setAction(ReminderTasks.ACTION_DISMISS_NOTIFICATION); if(intentToService.getAction()!=null){ String actionString = intentToService.getAction(); Log.d("测试Action:",actionString); } //创建 PEndingIntent PendingIntent pendingIntent= PendingIntent.getService( context, WATER_REMINDER_ACTION_IGNORE, intentToService, PendingIntent.FLAG_CANCEL_CURRENT ); // 创建 Action return new NotificationCompat.Action(R.drawable.ic_local_drink_black_24px,"我知道了",pendingIntent); }
2.在 NotificationBuilder 中 addAction
.addAction(ignoreReminderAction(context))
效果图
相关文章推荐
- 国内Android应用分析报告,看看大家都在用什么开发
- android 五大应用开发框架是什么
- android应用开发详解(十六)------------------Notification
- 开发一个Android应用之前,应该做点什么?
- Android 应用开发笔记 - 状态栏提示(Notification、NotificationManager)
- Android应用开发基础篇(2)-----Notification(状态栏通知)
- 在Android开发过程中搭建一个自己的应用框架有几个步骤?需要注意什么?
- Android应用开发基础篇(2)-----Notification(状态栏通知)
- android应用开发揭秘之Notification的简单用法
- Android应用开发基础篇(2)-----Notification(状态栏通知)
- 我是一个android 开发人员,平时工作不忙的时候做点什么好呢,不知道该做点什么有意义的事情。
- 在PPC上面用.NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述
- Android入门前言(一)之------Android应用开发入门五问
- 在PPC上面用.NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述
- 简单介绍如何应用DDMS协助开发Android Apps
- Google手机操作系统Android应用开发入门
- 《Android 应用开发课程大纲》 V1.0
- 怎样开发适应不同分辨率的Android应用
- Android应用开发入门五问
- Google手机操作系统Android应用开发入门