Android中的通知Notification
发布日期:2021-06-30 18:40:02
浏览次数:3
分类:技术文章
本文共 9028 字,大约阅读时间需要 30 分钟。
1、获得系统服务
notificationmanager=(NotificationManager) context.getSystemService(NOTIFICATION_SERVICE); 2、创建Notification notification=new Notification(R.drawable.keai,”可爱”,System.currentTimeMillis()); 3、对Notification进行一些设置 notification.flags=Notification.FLAG_AUTO_CANCEL; //设置下拉点击之后回到应用程序,可以有多个值选择 4、Intent与PendingIntent Intent intent=new Intent(this,Z18Activity.class); pendingintent=PendingIntent.getActivity(this,0,intent,0); notification.setLatestEventInfo(this,”真可爱”,”太可爱啦!”,pendingintent); 5、可更改提示下拉条中的布局 RemoteViews rv=new RemoteViews(this.getPackageName(),R.layout.main); //此步骤是修改下拉后看到提示条的布局 notification.contentView=rv; 6、用NotificationManager发送Notification提示信息 notificationmanager.notify(0,notification); //通过标识发送指定的Notification
上面有些步骤是属于并列的,可能后面的操作将覆盖前面的操作
Example1:
Ticker Text:Notification刚出来的时候,在状态栏上滚动的字幕,如果很长,会自动分割滚动
Content Title:Notification展开后的标题 Content Text:Notification展开后的内容取得NotificationManage
private NotificationManager mNotificationManager;mNotificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
创建Notification并且显示
//Notification的滚动提示String tickerText = "My notification, It's a long text! Hello World desiyo?";//Notification的图标,一般不要用彩色的int icon = R.drawable.icon_02241_3;//contentTitle和contentText都是标准的Notification View的内容//Notification的内容标题,拖下来后看到的标题String contentTitle="My notification";//Notification的内容String contentText="Hello World!";//Notification的Intent,即点击后转向的ActivityIntent notificationIntent = new Intent(this, this.getClass());notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);//创建NotifcationNotification notification = new Notification(icon, tickerText, System.currentTimeMillis());//设定Notification出现时的声音,一般不建议自定义notification.defaults |= Notification.DEFAULT_SOUND;//设定如何振动notification.defaults |= Notification.DEFAULT_VIBRATE;//指定Flag,Notification.FLAG_AUTO_CANCEL意指点击这个Notification后,立刻取消自身//这符合一般的Notification的运作规范notification.flags|=Notification.FLAG_AUTO_CANCEL;notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent);//显示这个notificationmNotificationManager.notify(HELLO_ID, notification);
这是最基本的应用,可以说除了找个合适的图标以外,其它都很简单。
使用自定义View的Notification 同Toast一样,我们也可以自已指定1个View来作为Notification展开后的显示内容,比如说在Android Market中下载的时候,Notification中会显示当前下载的进度,那么我们也来模拟1个这样的效果吧。首先给出View的定义文件:notification_view_sample.xml
//Notification的滚动提示String tickerText1 = "Custom view for download notification";//Notification的图标,一般不要用彩色的int icon1 = android.R.drawable.stat_sys_download;//Notification的Intent,即点击后转向的ActivityIntent notificationIntent1 = new Intent(this, this.getClass());notificationIntent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);PendingIntent contentIntent1 = PendingIntent.getActivity(this, 0, notificationIntent1, 0);//创建NotifcationNotification notification1 = new Notification(icon1, tickerText1, System.currentTimeMillis());//设定Notification出现时的声音,一般不建议自定义notification1.defaults |= Notification.DEFAULT_SOUND;//设定是否振动notification1.defaults |= Notification.DEFAULT_VIBRATE;//notification.number=numbers++;//指定Flag,Notification.FLAG_AUTO_CANCEL意指点击这个Notification后,立刻取消自身//这符合一般的Notification的运作规范notification1.flags|=Notification.FLAG_ONGOING_EVENT;//创建RemoteViews用在Notification中RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.notification_view_sample);contentView.setTextViewText(R.id.notificationTitle, "Download:Facebook for android");contentView.setTextViewText(R.id.notificationPercent, "35%");contentView.setProgressBar(R.id.notificationProgress, 100, 35, false);notification1.contentView = contentView;notification1.contentIntent=contentIntent1;//显示这个notificationmNotificationManager.notify(CUSTOM_VIEW_ID, notification1);
注意以上代码中使用的是RemoteViews,而不是普通的View,另外使用的是PendingIntent而不是普通的Intent,这都说明了 Notification是1个“远程”的东西,其中能够使用的控件是受限制的,比如说TableLayout就不能使用。看下效果图,是不是和 Market中的界面很接近呢?
由于在使用自定义的view时不必使用setLastEventInfo()方法,所以你必须为Notification的contentIntent域定义一个Intent,如下所示:
RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.notification_view);contentView.setTextViewText(R.id.notificationTitle, "下载文件:测试文件");contentView.setTextViewText(R.id.notificationPercent, "55%");contentView.setProgressBar(R.id.notificationProgress, 100, 55, false);notice.contentView = contentView;notice.contentIntent = contentIntent;
注意:当为notification创建自定义的布局时,你必须确保它能够再不同的设备方向以及分辨率下都正常工作。这对于所有的布局工作都是十分重要的,所以,不要定义过于复杂的布局,而且要在多种情况下进行测试。
更好的控制Notification 动画图标怎么做?
和selector类似,定义1个XML文件放在drawable下,下面是之前用到的stat_sys_download的定义:如何更新Notification?
注意到前面的代码中用到的CUSTOM_VIEW_ID,这是Notification的ID,如果2次弹出的Notification的ID相同,那么Notification就只会更新而不会再次滚动提醒。之前给出的ProgressBar是不会动的,利用这个方法就可以让它动起来(或者也可以直接调用RemoteView的set方法来直接更新?未试验) 如何自定义提示的声音和振动 ? //自定义提示音notification.sound = Uri.parse(“file:///sdcard/notification/ringer.mp3”); //自定义振动方式long[] vibrate = {0,100,200,300};notification.vibrate = vibrate; 请注意:如果使用了DEFAULT_SOUND或DEFAULT_VIBRATE,则自定义的提示音和振动无效。 在类似于短消息的应用中如何提示数量? 使用Notification的number属性,默认为0,如果是1或更大的数字,则会在图标上覆盖显示这个数字。 notification.number=notificationNumber; Flag的使用 notification有1个flag属性,除了DEFAULT_SOUND之外,还有几个很有用的属性。 FLAG_AUTO_CANCEL:自动清除Notification,前面的例子中有用到 FLAG_INSISTENT:提示音一直不停,直至用户响应(很吵吧!) FLAG_ONGOING_EVENT:表示这是1个正在进行的任务,不可以清除,第2个例子中有用到 FLAG_NO_CLEAR:不可以清除 实例来源: 参考:Example2:
Button btn4 = (Button) this.findViewById(R.id.btn4); btn4.setText("发出一个通知(Notification)"); btn4.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // 实例化通知管理器 NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // 指定单击通知后所打开的详细的通知页面(单击通知后打开 NotificationView) PendingIntent contentIntent = PendingIntent.getActivity( Main.this, 0, new Intent(Main.this, NotificationView.class), 0); // 实例化一个通知,并指定其图标和标题(在提示栏上显示) Notification n = new Notification(R.drawable.icon01, "我是滚动的通知信息我是滚动的通知信息我是滚动的通知信息", System.currentTimeMillis()); // 设置通知的发送人和通知的详细内容(打开提示栏后在通知列表中显示) n.setLatestEventInfo(Main.this, "通知发送人", "我是详细的通知信息我是详细的通知信息我是详细的通知信息", contentIntent); // 100 毫秒延迟后,震动 250 毫秒,暂停 100 毫秒后,再震动 500 毫秒 n.vibrate = new long[] { 100, 250, 100, 500 }; // 发出通知(其中第一个参数为通知标识符) nm.notify(0, n); } });
// 单击通知列表的某个通知后,所打开的详细的通知页public class NotificationView extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.view); TextView txtMsg = (TextView)this.findViewById(R.id.txtMsg); txtMsg.setText("点通知之后所链接到的 Activity"); NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // 取消显示在通知列表中的指定通知(参数为通知标识符) nm.cancel(0); // 需要关闭此 Activity 的话就 finish 它既可 // this.finish(); }}
…
Example3:
public class NotificationActivity extends Activity implements OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.notification); findViewById(R.id.notificationBtn).setOnClickListener(this); } @Override public void onClick(View arg0) { // TODO Auto-generated method stub addNotification(); } private void addNotification() { NotificationManager manager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(); notification.icon = R.drawable.icon; notification.tickerText = "我在这里"; notification.defaults = Notification.DEFAULT_SOUND; notification.audioStreamType = android.media.AudioManager.ADJUST_LOWER; Intent intent = new Intent(this, Notification2Activity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); notification.setLatestEventInfo(this, "短信通知", "亲爱的,晚上8点老地方见哦~", pendingIntent); manager.notify(R.drawable.icon, notification); }}
public class Notification2Activity extends Activity implements OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.notification2); findViewById(R.id.cancleBtn).setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub cancleNotification(); } private void cancleNotification() { // TODO Auto-generated method stub NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); manager.cancel(R.drawable.icon); Toast.makeText(this, "Notification cancled", Toast.LENGTH_SHORT).show(); }}
都是很简单的例子,帮助理解!
转自:
转载地址:https://linqiarui.blog.csdn.net/article/details/51456894 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月28日 15时23分24秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Oracle 行转列 pivot函数基本用法
2019-04-30
Oracle字符串分隔符替换(替换奇数个或偶数个)
2019-04-30
Oracle 利用 UTL_SMTP 包发送邮件
2019-04-30
Oracle 自定义函数实现split功能,支持超长字符串和clob类型的分隔
2019-04-30
Oracle 的循环中的异常捕捉和处理
2019-04-30
Oracle通过pivot和unpivot配合实现行列转换
2019-04-30
给Oracle数据库换一个1522端口的监听
2019-04-30
Excel表格数据生成ECharts图表
2019-04-30
阿里云短信服务python版,pyinstaller打包运行时缺少文件
2019-04-30
Oracle的pfile和spfile的一点理解和笔记
2019-04-30
WebService的简单案例记录(Java)
2019-04-30
Html利用PHP与MySQL交互
2019-04-30
dos简单命令
2019-04-30
mysql的安装与卸载与Navicat远程连接
2019-04-30
java实现稀疏数组及将稀疏数组存入硬盘中
2019-04-30
2021-05-18
2019-04-30
Flutter 使用插件打开相册、相机
2019-04-30
libuv实现tcp代理服务器
2019-04-30
libuv使用不当导致的内存泄漏
2019-04-30