編寫:徐建祥(netpirate@gmail.com)
日期:2010/11/22
網(wǎng)址:http://www.anymobile.org
QQ的狀態(tài)欄通知機(jī)制:當(dāng)所有QQ的UI Activity切換到后臺(tái)后,添加狀態(tài)通知;切換回來后,刪除該狀態(tài)通知。
飛信的狀態(tài)欄通知方式:運(yùn)行軟件后,圖標(biāo)一直顯示在狀態(tài)欄的通知欄中;顯示退出軟件則刪除該狀態(tài)通知。
似乎QQ的更有點(diǎn)技術(shù)含量,多個(gè)程序切換到后臺(tái)的處理而已;以飛信的模式,做個(gè)類似的測(cè)試,案例如下:
程序路徑:org.anymobile.im
程序入口:org.anymobile.im.LoginActivity(Action:android.intent.action.MAIN;Category:android.intent.category.LAUNCHER)
主界面程序:org.anymobile.im.MainActivity
測(cè)試程序流程:未登錄的情況下,或者第一次運(yùn)行會(huì)打開LoginActivity程序;登陸后,一直停留在主界面MainActivity。
所以,通過Notification,需可以回到im項(xiàng)目的上一個(gè)界面程序,LoginActivity / MainActivity,這里就要參考Launcher應(yīng)用的相關(guān)實(shí)現(xiàn),Intent的flag設(shè)置。
測(cè)試代碼,新建一個(gè)android項(xiàng)目,TestNotification,入口程序:TestActivity,代碼如下:
- package org.anymobile.test;
- import android.app.Activity;
- import android.content.ComponentName;
- import android.content.Intent;
- import android.graphics.LightingColorFilter;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class TestActivity extends Activity
- {
- private static final int ADD_ID = 0;
- private static final int DEL_ID = 1;
-
-
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- Button button = (Button) this.findViewById(R.id.btn_menu);
- button.setOnClickListener(new OnClickListener()
- {
- public void onClick(View v)
- {
-
- String packName = "org.anymobile.im";
- String className = packName + ".LoginActivity";
-
- Intent intent = new Intent();
- ComponentName componentName = new ComponentName(packName, className);
- intent.setComponent(componentName);
-
- intent.setAction("android.intent.action.MAIN");
- intent.addCategory("android.intent.category.LAUNCHER");
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
-
- TestActivity.this.startActivity(intent);
- }
- });
-
- button.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFFAA0000));
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu)
- {
- menu.add(0, ADD_ID, 0, "ADD");
- menu.add(0, DEL_ID, 0, "DEL");
-
- return super.onCreateOptionsMenu(menu);
- }
-
- }
OK,開始測(cè)試狀態(tài)欄的通知功能:
1、LoginActivity.onCreate() 調(diào)用showNotification()方法,創(chuàng)建一個(gè)通知圖標(biāo);
-
-
-
-
- protected void showNotification()
- {
- CharSequence from = "IM";
- CharSequence message = "IM start up";
-
- Intent intent = new Intent();
- ComponentName componentName = new ComponentName("com.longcheer.imm",
- "com.longcheer.imm.activitys.LoginActivity");
- intent.setComponent(componentName);
- intent.setAction("android.intent.action.MAIN");
- intent.addCategory("android.intent.category.LAUNCHER");
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
-
-
- PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);
-
- Notification notif = new Notification(R.drawable.icon, "IMM Still run background!",
- System.currentTimeMillis());
- notif.setLatestEventInfo(this, from, message, contentIntent);
-
-
- NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
- nm.notify(R.string.app_name, notif);
- }
2、在LoginActivity / MainAcitivity的退出操作中cancel該通知。
- private void doExit()
- {
- this.finish();
- NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
- nm.cancel(R.string.app_name);
- }
測(cè)試OK!!
posted on 2010-12-14 23:08
Xu Jianxiang 閱讀(4711)
評(píng)論(0) 編輯 收藏 所屬分類:
Android