您的位置:首页 > 移动开发 > Android开发

Notification使用

2015-10-28 17:58 549 查看

如果图片不能显示 请点击这里

Notification一些基本用法 根据四个需求来

普通的查看 跳转页面

查看后返回某个固定页面的意图

我们自己的APP的通知 查看之后回到我们APP的首页  或者连续几页返回

新建一个Task 用来查看 返回上一个最近任务栈

查看之后 回到之前正在进行的任务 效果上感觉这个和普通的没什么差别 这个就是新建一个task专门来处理查看通知的操作

自定义View的Notification

notification对象的构建

低版本的就不说了 这里用Build构造

notification的管理类
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
builder = new NotificationCompat.Builder(this);
builder.setContentInfo("info");
builder.setContentTitle("title");
builder.setContentText("下载进度");
builder.setSmallIcon(R.mipmap.collention);
//构建 发出通知
Notification notification = builder.build();
notificationManager.notify(0, notification);


1 普通的跳转 就是在构建notification对象的时候塞入一个Intent 这里叫PendingIntent 延迟意图

Intent resultIntent1 = new Intent(this, Main2Activity.class);
//这个用于下面的 在发送通知时判断是否存在 因为设置的是PendingIntent.FLAG_UPDATE_CURRENT
int requestCode1 = (int) SystemClock.uptimeMillis();
PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode1, resultIntent1, PendingIntent.FLAG_UPDATE_CURRENT);
changeIntent(pendingIntent);


PendingIntent.FLAG_UPDATE_CURRENT**这个参数一般有四种选择分别是:

FLAG_CANCEL_CURRENT:如果构建的PendingIntent已经存在,则取消前一个,重新构建一个。 FLAG_NO_CREATE:如果前一个PendingIntent已经不存在了,将不再构建它。

FLAG_ONE_SHOT:表明这里构建的PendingIntent只能使用一次。

FLAG_UPDATE_CURRENT:如果构建的PendingIntent已经存在,那么 系统将不会重复创建,只是把之前不同的传值替换掉。(所以这里如果值不变 是不是有变化的 以致于会出现一些问题 通常做法就是在构建PendingIntent的时候传入不一样的requestCode来改变 更新PendingIntent 一般都是用这个)

使用代码如下 效果如图

Intent resultIntent1 = new Intent(this, Main4Activity.class);
int requestCode1 = (int) SystemClock.uptimeMillis();
PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode1, resultIntent1, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
Notification notification = builder.build();
notificationManager.notify(0, notification);


发现 在当前页面查看通知后返回还是在当前页面 退出程序之后 在主菜单查看通知 返回的是主菜单



2 回退到固定的页面 这里做一些配置

清单文件的配置 指明parentActivity 和TaskStackBuilder

<activity
android:name=".Main2Activity"
android:excludeFromRecents="true"
android:launchMode="singleTask"
//指定当前Activity的返回的上一个页面
android:parentActivityName=".MainActivity"
android:taskAffinity="" >
//兼容低版本
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
//配置同上
<activity
android:name=".Main3Activity"
android:parentActivityName=".Main2Activity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".Main2Activity" />
</activity>
Intent resultIntent = new Intent(this, Main3Activity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(Main3Activity.class);
stackBuilder.addNextIntent(resultIntent);
int requestCode = (int) SystemClock.uptimeMillis();
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(requestCode,   PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(resultPendingIntent );
Notification notification = builder.build();
notificationManager.notify(0, notification);


效果图

#### 只要查看通知 返回顺序都是 指定要其parentActivity的页面



3:新开任务栈 的方式

效果就不看了 看看如何配置吧

<activity
android:name=".Main2Activity"
//清除最近列表的记录
android:excludeFromRecents="true"
//新开任务栈 启动模式
android:launchMode="singleTask"
android:parentActivityName=".MainActivity"
//这个要写 不然会有问题 不然没效果  我不太清楚这个有什么用 后续在了解
android:taskAffinity="" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
Intent notifyIntent = new Intent(this, Main2Activity.class);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
int requestCode2 = (int) SystemClock.uptimeMillis();
PendingIntent pendIntent = PendingIntent.getActivity(this, requestCode2,
notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);

builder.setContentIntent(pendIntent );
Notification notification = builder.build();
notificationManager.notify(0, notification);


4 自定义通知界面

NotificationCompat.Builder builder1 = new NotificationCompat.Builder(this);
RemoteViews remoteView = new RemoteViews(getPackageName(),R.layout.remote);
remoteView.setTextViewText(R.id.text, "DaemonLiu");
remoteView.setImageViewResource(R.id.image, R.mipmap.collention);
builder1.setSmallIcon(R.mipmap.collention);
builder1.setContent(remoteView);
Intent resultIntent4 = new Intent(this, Main4Activity.class);
int requestCode4 = (int) SystemClock.uptimeMillis();
PendingIntent pendingIntent4 = PendingIntent.getActivity(this, requestCode4, resultIntent4, PendingIntent.FLAG_UPDATE_CURRENT);
remoteView.setOnClickPendingIntent(R.id.image,pendingIntent4);
builder.setContentIntent(pendingIntent4);
Notification notification = builder1.build();
notificationManager.notify(1, notification);


效果图 自定义通知页面 然后再image上面附加事件 点击后跳转



在关于进度条的设置 上面第一张图有进度条 代码如下

**new Thread(new Runnable() {
@Override
public void run() {
int incr;
for (incr = 0; incr <= 100; incr += 5) {
// mBuilder.setProgress(100, incr, false);
builder.setProgress(100, incr, false);
builder.setContentText("下载进度"+incr+"%");
notificationManager.notify(0, builder.build());
try {
Thread.sleep(300);
} catch (InterruptedException e) {
}
}
builder.setContentText("Download complete").setProgress(0, 0,
false);
notificationManager.notify(0, builder.build());
}
}
// Starts the thread by calling the run() method in its Runnable
).start();**


这里只是简单记录下notification的简单的使用 关于notification的更多详细介绍 4.0之后的 三种style形式等等 贴上一个地址 觉得写得挺详细的

http://blog.csdn.net/xy_nyle/article/details/19853591
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Notificati 通知 android