Notification

来源:互联网 发布:公司机房网络拓扑图 编辑:程序博客网 时间:2024/06/10 00:32
在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

0 0
原创粉丝点击