现在的位置: 首页 > 综合 > 正文

Android Notification的一些编码建议

2018年06月10日 ⁄ 综合 ⁄ 共 2148字 ⁄ 字号 评论关闭

1.创建通知

网上通知大部分的写法是:

创建通知实例:Notification notification = new Notification(R.drawable.home,"title",when); 

加载PendingIntentset:使用LatestEventInfo()方法

但是不知道各位有没有注意到LatestEventInfo()是一个已经废弃了的方法。官方推荐的方法是使用v4支持包下的NotificationCompat.Builder类创建实例,再调用manager.notify(id, builder.build())发生通知。其实V4包下的类和android.app包里的是相同的,使用支持包的好处是解决android操作系统各个版本的平台差异,提高程序的兼容性。在你的程序添加兼容包,就不会出现在某些版本中不支持该方法的问题。

一个简单的通知是这样写的:

NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
builder.setSmallIcon(R.drawable.ic_launcher);//提示的小图标,必须要设置,不然发不出通知
builder.setContentTitle("title");
builder.setContentText("content text");
builder.setDefaults(Notification.DEFAULT_SOUND);
builder.setAutoCancel(true);//设置点击后是否会自动消除
Intent intent=new Intent(this, cls);
PendingIntent pendingIntent=PendingIntent.getActivity(this,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
NotificationManager  manager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(id, builder.build());//发送通知

2.通知栏的导航设置

Android通过TaskStackBuilder来实现导航,必须在Manifest中声明Activity的层级关系。这个类是创建任务之间的导航堆栈,和按返回键返回上一个Activity的的堆栈是有区别的,使用TaskStackBuilder会使得你之前的Activity都被杀死,这是需要注意的。

TaskStackBuilder stackBuilder=TaskStackBuilder.create(this);
stackBuilder.addParentStack(class);
stackBuilder.addNextIntent(intent);//可以继续添加设置多级
PendingIntent pendingIntent=stackBuilder.getPendingIntent(0, PendingIntent.FLAG_CANCEL_CURRENT);

还需要在manifest中注册,其中android:parentActivityName4.0版本以上的,加上<meta-data也是为了保持程序兼容性

<activity    android:name="class"    android:parentActivityName="partenclass">  
  <meta-data        android:name="android.support.PARENT_ACTIVITY"        android:value="partentclass"/></activity>

还可以使用android:taskAffinity="string"创建一个新的任务,按返回键会直接回到home界面,但会使得这个Activity成为一个新的程序,按住home键可以发现这样的打开的Activity是会出现在最近列表里,就想是一个单独程序一样。

当然你可以不用TaskStackBuilder来创建任务堆栈,就像上面写的那个简单通知栏例子。这样打开的Activity会和程序中正常打开的Activity一样。

如何做成像QQ那样,好友发送新信息时,我们直接进入聊天界面不点击通知栏也可以消除通知。这应该是通过NotificationManager 的cancel(id)方法主动消除通知栏,android程序中通过id来唯一标识一个通知,当新的通知id和已有的通知id相同时就回覆盖已有的通知。

 

3.自定义通知

自定义通知是加载一个是个RemoteViews,这个和小挂件差不多。添加事件、文字、图片的方法也很相近。这里有篇转载的博客对其介绍的很全面,应该注意下作者对通知栏背景色的设置,以提高程序的兼容性。

http://blog.csdn.net/asce1885/article/details/7802627

抱歉!评论已关闭.