您的位置:首页 > 其它

Notification

2015-12-07 17:21 281 查看
在intent pendingintent那篇文章中提到notification,所以就写一下notification

概念

notification就是一个展示给user的一个message,只不过他展示在特定的地方。一个就是我们手机上看到的通知的小图标,还有一个地方就是我们下拉出来的显示框。英文描述这2个地方就是:notification area notification drawer

使用

NotificationCompat.Builder object中我们创建通知的标题啊,内容啊,意图等等。NotificationCompat.Builder.build()创建notification这个对象,最后notificationmanager.notify()发布通知

创建一个简单的通知的例子:

NotificationCompat.Builder mBuilder=new NotificationCompat.Builder(this);

.setSmallIcon(R.drawable.notification_icon);

.setContentTitle("My Notification");

.setContentText("Hello World");

Intent intent=new Intent(this,OtherActivity);

TaskStackBuilder builder=TaskStackBuilder.create(this);

builder.addParentStack(OtherActivity.class);

builder.addNextIntent(intent);

//使用TaskStackBuilder获得pendingIntent

PendingIntent pendingIntent=builder.getPendingIntent(0,PendingIntent.FLAG_UPDATA_CURRENT);

//设置通知的意图 pendingIntent

mBuilder.setContenIntent(pendingIntent);

NotificationManager manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

//mBuilder.builder()获得一个notification对象 notify发布这个通知

//id是给这个notification的一个标记

manager.notify(id,mBuilder.builder());

这里面最让人困惑的就是为什么要使用TaskStackBuilder,其实就是为了添加back stack。那back stack又是为了什么呢?告诉你,就是为了你按返回不会返回到notification,而是返回home screen。 知道这个以后,你就能很好的理解代码了。就是创建一个back stack,再为这个back stack(OtherActivity的back
stack)设置启动它的Intent,再从中获取PendingIntent,最后将这个pendingIntent传入通知的构建者,发出通知,完成。

当然了,在配置清单中要注意添加蓝色部分

<activity

android:name=".ResultActivity"

android:parentActivityName=".MainActivity">

<meta-data

android:name="android.support.PARENT_ACTIVITY"

android:value=".MainActivity"/>

</activity>

因为这里提到了TaskStackBuilder创建stack 那就再讲一个使用PendingIntent的方式。这种方式不需要构建stack,PendingIntent的获取直接从PendingItent这个类中获取

<activity

android:name=".ResultActivity"

...

android:launchMode="singleTask"

android:taskAffinity=""

android:excludeFromRecents="true">

</activity>

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);

Intent notifyIntent =

new Intent(this, ResultActivity.class);

// 设置的参数代表 创建一个新的,空的task

notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK

| Intent.FLAG_ACTIVITY_CLEAR_TASK);

// 获取PendingIntent

PendingIntent notifyPendingIntent =

PendingIntent.getActivity(

this,

0,

notifyIntent,

PendingIntent.FLAG_UPDATE_CURRENT

);

builder.setContentIntent(notifyPendingIntent);

NotificationManager mNotificationManager =

(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(id, builder.build());

最后:

android4以后 notification里面增加了一些东西

说我知道的一个 你的notification是可以扩展的

其实就是 首先还是和前面一样创建NotificationCompat.Builder object 并向里面填充数据,只不过加上一步Builder.setStyle()其中要向其中传入一个expanded layout object
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: