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
  • 1648

Android--状态栏的图标和文字提醒/NotificationManager与Notification对象的应用

首先,我们需要看一张截图,说明这个例子的作用是什么。 这个例子用到的东西很多,首先,我们需要现在布局文件中定义一个Spinner,代码如下: <Spinner android:i...

Android 状态栏添加图标

  • 2013-12-05 11:34
  • 1.33MB
  • 下载

android2.1状态栏显示耳机图标

原生态的android系统是没有耳机插入或未插入的状态指示的,本文就是讲解如何添加耳机插入的状态指示。效果图如下 如图,当插入耳机后,在status bar上出现了一个耳机的图标。 这...

android标题栏、状态栏图标文字颜色及背景动态变化

android中沉浸式状态栏的文章已经满大街了,可是在实现某些效果时,还是得各种搜索,测试一通后,最后还常常满足不了要求,即使好不容易在一部手机上满足了需求,放在另外一手机上,发现效果差强人意。今天把...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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