Android 软件的状态栏图标通知处理

转载 2011年01月19日 14:37:00

 

编写:徐建祥(netpirate@gmail.com)

日期:2010/11/22

网址:http://www.anymobile.org

QQ的状态栏通知机制:当所有QQ的UI Activity切换到后台后,添加状态通知;切换回来后,删除该状态通知。

飞信的状态栏通知方式:运行软件后,图标一直显示在状态栏的通知栏中;显示退出软件则删除该状态通知。

似乎QQ的更有点技术含量,多个程序切换到后台的处理而已;以飞信的模式,做个类似的测试,案例如下:

程序路径:org.anymobile.im

程序入口:org.anymobile.im.LoginActivity(Action:android.intent.action.MAIN;Category:android.intent.category.LAUNCHER)

主界面程序:org.anymobile.im.MainActivity

测试程序流程:未登录的情况下,或者第一次运行会打开LoginActivity程序;登陆后,一直停留在主界面MainActivity。

所以,通过Notification,需可以回到im项目的上一个界面程序,LoginActivity / MainActivity,这里就要参考Launcher应用的相关实现,Intent的flag设置。

测试代码,新建一个android项目,TestNotification,入口程序:TestActivity,代码如下:

 

  1. package org.anymobile.test;  
  2. import android.app.Activity;  
  3. import android.content.ComponentName;  
  4. import android.content.Intent;  
  5. import android.graphics.LightingColorFilter;  
  6. import android.os.Bundle;  
  7. import android.view.Menu;  
  8. import android.view.View;  
  9. import android.view.View.OnClickListener;  
  10. import android.widget.Button;  
  11. public class TestActivity extends Activity  
  12. {  
  13.     private static final int ADD_ID = 0;  
  14.     private static final int DEL_ID = 1;  
  15.       
  16.     /** Called when the activity is first created. */  
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState)  
  19.     {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.           
  23.         Button button = (Button) this.findViewById(R.id.btn_menu);  
  24.         button.setOnClickListener(new OnClickListener()  
  25.         {  
  26.             public void onClick(View v)  
  27.             {  
  28. //              TestActivity.this.openOptionsMenu();  
  29.                 String packName = "org.anymobile.im";  
  30.                 String className = packName + ".LoginActivity";  
  31.                   
  32.                 Intent intent = new Intent();  
  33.                 ComponentName componentName = new ComponentName(packName, className);  
  34.                 intent.setComponent(componentName);  
  35.                   
  36.                 intent.setAction("android.intent.action.MAIN");  
  37.                 intent.addCategory("android.intent.category.LAUNCHER");  
  38.                 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  39.                 intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);  
  40.                   
  41.                 TestActivity.this.startActivity(intent);  
  42.             }  
  43.         });  
  44. //        button.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);  
  45.         button.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF0xFFAA0000));  
  46.     }  
  47.     @Override  
  48.     public boolean onCreateOptionsMenu(Menu menu)  
  49.     {  
  50.         menu.add(0, ADD_ID, 0"ADD");  
  51.         menu.add(0, DEL_ID, 0"DEL");  
  52.           
  53.         return super.onCreateOptionsMenu(menu);  
  54.     }  
  55.       
  56. }  
 

 

OK,开始测试状态栏的通知功能:

1、LoginActivity.onCreate() 调用showNotification()方法,创建一个通知图标;

 

  1. /** 
  2.    * The notification is the icon and associated expanded entry in the 
  3.    * status bar. 
  4.    */  
  5.   protected void showNotification()  
  6.   {  
  7.       CharSequence from = "IM";  
  8.       CharSequence message = "IM start up";  
  9.         
  10. Intent intent = new Intent();  
  11. ComponentName componentName = new ComponentName("com.longcheer.imm",   
  12.     "com.longcheer.imm.activitys.LoginActivity");  
  13. intent.setComponent(componentName);  
  14. intent.setAction("android.intent.action.MAIN");  
  15. intent.addCategory("android.intent.category.LAUNCHER");  
  16. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  17. intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);  
  18.   
  19.       // The PendingIntent to launch our activity if the user selects this notification  
  20.       PendingIntent contentIntent = PendingIntent.getActivity(this0, intent, 0);  
  21.       // construct the Notification object.  
  22.       Notification notif = new Notification(R.drawable.icon, "IMM Still run background!",  
  23.               System.currentTimeMillis());  
  24.       notif.setLatestEventInfo(this, from, message, contentIntent);  
  25.         
  26.       // look up the notification manager service  
  27.       NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);  
  28.       nm.notify(R.string.app_name, notif);  
  29.   }  
 

 

2、在LoginActivity / MainAcitivity的退出操作中cancel该通知。

 

  1. private void doExit()   
  2. {  
  3.     this.finish();  
  4.     NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);  
  5.        nm.cancel(R.string.app_name);  
  6. }  
 

 

测试OK!!

Android 5.0状态栏通知图标的实现

Android 5.0状态栏通知图标的实现 我之前的博客文章中有一片是介绍了关于Android5.0 下拉通知栏快捷开关的添加,文章牵扯到一个知识点就是Android 5.0状态栏通知图标的实现。那...
  • lyjIT
  • lyjIT
  • 2016年06月03日 17:57
  • 1938

Android基础—Notification(状态栏通知)详解

1.设计文档部分解读 1)Notification的基本布局 上面的组成元素依次是: Icon/Photo:大图标 Title/Name:标题 Message:内容信息 Timesta...
  • u012758088
  • u012758088
  • 2017年03月22日 11:21
  • 449

Android 软件的状态栏图标通知处理

编写:徐建祥(netpirate@gmail.com)日期:2010/11/22网址:http://www.anymobile.orgQQ的状态栏通知机制:当所有QQ的UI Activity切换到后台...
  • netpirate
  • netpirate
  • 2010年11月22日 20:52
  • 9123

正确地设置安卓通知栏图标尺寸

做一个APP,需要用到通知的功能,但是通知栏上的icon在显示的时候会出现问题。具体的问题就是图标太大,只能显示其中的一部分: 这里来探讨一下,什么尺寸的图标可以被正确显示...
  • icyfox_bupt
  • icyfox_bupt
  • 2014年05月19日 00:14
  • 25421

使用 Notification 在状态栏中显示一个通知。

使用 Notification 在状态栏中显示一个通知。
  • antimage08
  • antimage08
  • 2015年11月27日 11:25
  • 669

android 5.0以上通知栏、状态栏图标变成白色

在5.0以上的系统上发现,平常的自定义notification出来的icon,居然在状态栏上变成了纯白色的icon。 查看源码可知道: protected void applyColorsAn...
  • gjy211
  • gjy211
  • 2016年08月12日 11:30
  • 6614

Android实现3种Notification(状态栏通知)

推荐文章(期待大家的star): Android实现购物车页面及购物车效果(点击动画) Android自定义收银键盘(原创)源码下载地址Notification,是一种具有全局...
  • qq_34908107
  • qq_34908107
  • 2017年07月14日 13:52
  • 459

Android系统状态栏图标间距大小的调整

最直接有效的办法就是在做图标的时候留出间距,在代码或者布局中设置间距效果不是很明显。...
  • jdsjlzx
  • jdsjlzx
  • 2013年12月12日 11:22
  • 5774

Android 7.0 SystemUI 状态栏左侧应用图标显示控制流程

SystemUI 状态栏左侧应用图标如下图所示: 状态栏StatusBar显示分为三个区域,分别是左侧应用图标显示区域(USB图标,下载图标,截屏图标),中右侧系统图标显示(Wifi 蓝牙 信号...
  • tj_shenzhendaxue
  • tj_shenzhendaxue
  • 2017年05月18日 14:18
  • 1449

解决Android 5.1系统以上通知状态栏小图标只显示白色问题

看上图,想必大家都有遇到过吧,最近俺也遇到了,找到了解决方法,现在分享下也做个记录哈。 问题发生的规则是Android5.1或者以上的手机系统使用了非常多的颜色的通知图标,就会出现,怎么解决呢,很简单...
  • msn465780
  • msn465780
  • 2016年02月25日 11:11
  • 2993
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 软件的状态栏图标通知处理
举报原因:
原因补充:

(最多只允许输入30个字)