android-Notification点击跳转Activity
来源:互联网 发布:退火算法用途 编辑:程序博客网 时间:2024/05/18 03:35
> 在日历应用中,你新建一个提醒,当提醒通知收到后,你点击通知,会进入提醒的内容页面,如果这个时候按back键,会直接退出应用。
但是在Gmail的应用中,如果有一封新邮件到来,那么点击通知后,会进入到邮件的内容页面,等你看完邮件,点击back键,会退到邮件列表页面,再按back键,才会退出应用。
> 我们总结一下两种情况,假设我们的应用有两个Activity(ParentActivity、SubActivity),notification中设置打开的Activity为SubActivity。
那么第一种情况就是:
点击Notification ——>进入SubActivity ——> back键 ——> 退出应用
第二种情况:
点击Notification ——>进入SubActivity ——> back键 ——> 退到ParentActivity ——>back键 ——>退出应用
> 实现
第一种情况比较简单,只需要在PendingIntent中指定Activity,不需要其他设置,Android默认的就这样。
- PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
但是在创建PendingIntent的时候需要注意参数PendingIntent.FLAG_CANCEL_CURRENT
这个标志位用来指示:如果当前的Activity和PendingIntent中设置的intent一样,那么久先取消当前的Activity,用PendingIntent中指定的Activity取代之。
另外,需要在Manifest中对指定的Activity设置属性
- <activity android:name=".SubActivityl"
- android:launchMode="singleTask"
- android:taskAffinity=""
- android:excludeFromRecents="true">
- </activity>
第二种情况稍微复杂点,因为如果只打开一个SubActivity,程序并没办法知道他的上一级Activity是谁,所以需要在点击Notification时打开一组Activity,但是我们并不需要一个个去调用startActivity方法,PendingIntent提供了个静态方法getActivities,里面可以设置一个Intent数组,用来指定一系列的Activity。
所以我们首先写一个函数创建一个Activity数组:
- Intent[] makeIntentStack(Context context) {
- Intent[] intents = new Intent[2];
- intents[0] = Intent.makeRestartActivityTask(new ComponentName(context, com.example.notificationtest.MainActivity.class));
- intents[1] = new Intent(context, com.example.notificationtest.SubActivity.class);
- return intents;
- }
其中需要注意的是Intent.makeRestartActivityTask方法,这个方法用来创建activity栈的根activity
接下来,创建并显示Notification:
- void showNotification(Intent intent) {
- Notification notification = new Notification(
- R.drawable.status_icon,
- "Hello World ticker text",
- System.currentTimeMillis());
- PendingIntent contentIntent = PendingIntent.getActivities(
- this,
- 0,
- makeIntentStack(this),
- PendingIntent.FLAG_CANCEL_CURRENT);
- notification.setLatestEventInfo(
- this,
- "Title",
- "Hey, shall we have a dinner tonight",
- contentIntent);
- notification.flags |= Notification.DEFAULT_ALL;
- mNM.notify(1, notification);
- }
NotificationManager notificationManager = (NotificationManager)
this
.getSystemService(android.content.Context.NOTIFICATION_SERVICE);
// 定义Notification的各种属性
Notification notification =
new
Notification(R.drawable.icon,
"测试"
, System.currentTimeMillis());
//FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉
//FLAG_NO_CLEAR 该通知不能被状态栏的清除按钮给清除掉
//FLAG_ONGOING_EVENT 通知放置在正在运行
//FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应
notification.flags |= Notification.FLAG_ONGOING_EVENT;
// 将此通知放到通知栏的"Ongoing"即"正在运行"组中
notification.flags |= Notification.FLAG_NO_CLEAR;
// 表明在点击了通知栏中的"清除通知"后,此通知不清除,经常与FLAG_ONGOING_EVENT一起使用
notification.flags |= Notification.FLAG_SHOW_LIGHTS;
//DEFAULT_ALL 使用所有默认值,比如声音,震动,闪屏等等
//DEFAULT_LIGHTS 使用默认闪光提示
//DEFAULT_SOUNDS 使用默认提示声音
//DEFAULT_VIBRATE 使用默认手机震动,需加上<uses-permission android:name="android.permission.VIBRATE" />权限
notification.defaults = Notification.DEFAULT_LIGHTS;
//叠加效果常量
//notification.defaults=Notification.DEFAULT_LIGHTS|Notification.DEFAULT_SOUND;
notification.ledARGB = Color.BLUE;
notification.ledOnMS =
5000
;
//闪光时间,毫秒
// 设置通知的事件消息
CharSequence contentTitle =
"标题"
;
// 通知栏标题
CharSequence contentText =
"内容"
;
// 通知栏内容
//如果需要跳转到指定的Activity,则需要设置
PendingIntent
Intent notificationIntent =
new
Intent(A.
this
, B.
class
);
// 点击该通知后要跳转的Activity
notificationIntent.putExtra("date","需要传递的参数");
PendingIntent contentItent = PendingIntent.getActivity(
this
,
requestCode, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(
this
, contentTitle, contentText, contentItent);
// 把Notification传递给NotificationManager
notificationManager.notify(
0
, notification);
- android-Notification点击跳转Activity
- android-Notification点击跳转指定的Activity
- android 点击notification,跳转activity 时调用oncreate方法
- Notification点击跳转Activity并传值
- Android 通知栏Notification点击跳转无效
- 点击Notification跳转到正在运行的activity
- android 点击notification只启动一个activity
- Android中使用Notification并通过点击Notification重新启动Activity
- Android中使用Notification并通过点击Notification重新启动Activity
- Android notification点击跳转到Activity,点击返回跳转,前一条消息目标Intent的值不被后面的消息覆盖,getActivities第二个参数必须区分开来
- Android 控件之点击链接跳转Activity
- Android Notification设置PendingIntent后点击没有跳转
- Android Notification的基本使用和点击跳转中的注意事项
- Notification点击跳转及消失
- Android中notification点击进入新activity重复的问题
- android点击系统通知Notification,进入指定的activity
- Android自定义通知布局Notification,点击Notification导航切换回原Activity
- Android自定义通知布局Notification,点击Notification导航切换回原Activity
- win7 theano 和 Keras 安装记录
- <LeetCode OJ> 231 / 342 Power of (Two / Four)
- Eclipse上开发IBM Bluemix应用程序
- C#之结构与枚举
- 设计模式的6大原则
- android-Notification点击跳转Activity
- 一些web前端相关网址收藏(新手必看)
- pb9在64位系统下提示:error opening DLL library pbws32.dll for external function
- C语言实现大数相加相减和相乘
- TListBox的Item改变高度
- STL_9:关联容器
- iOS开发中输入框的英文和中文的字数限制
- 《挑战程序设计竞赛》2.5.1 最短路 AOJ0189 2249 2200 POJ3255 2139 3259 3268(5)
- pat 1107. Social Clusters (30)