在开发Android项目时,用户难免会进行程序切换,在切换过程中,程序将进入后台运行,需要用时再通过任务管理器或是重新点击程序或是通过点击信息通知栏中的图标返回原来的界面,请问如何实现?

推荐图书

  • Android 2高级编程(第2版)
  • Google Android SDK开发范例大全(第2版)
  • 疯狂Android讲义


1个回答

对于这种效果一般的做法是在Activity中的onStop()方法中编写相应代码,因为当Activity进入后台时将会调用onStop()方法,我们可以在onStop()方法以Notification形式显示程序图标及信息,其中代码如下所示:

@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.v("BACKGROUND", "程序进入后台");
showNotification();
}

以上的showNotification()方法就是Notification。
然后点击标题栏的Notification后再返回到原来的Activity。

当然,我们也可以捕捉HOME键,在用户按下HOME键时显示Notification, 以下是代码示例:

// 点击HOME键时程序进入后台运行
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    // 按下HOME键
    if(keyCode == KeyEvent.KEYCODE_HOME){
        // 显示Notification
        notification = new NotificationExtend(this);
        notification.showNotification();
        moveTaskToBack(true);                

        return true;
    }

    return super.onKeyDown(keyCode, event);
}

这里的NotificationExtend是对显示Notification的一个封装,类中的代码如下:

package com.test.background;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.Color;

/**
 * Notification扩展类
 * @Description: Notification扩展类

 * @File: NotificationExtend.java

 * @Package com.test.background

 * @Author Hanyonglu

 * @Date 2012-4-13 下午02:00:44

 * @Version V1.0
 */
public class NotificationExtend {
    private Activity context;

    public NotificationExtend(Activity context) {
        // TODO Auto-generated constructor stub
        this.context = context;
    }

    // 显示Notification
    public void showNotification() {
        // 创建一个NotificationManager的引用
        NotificationManager notificationManager = (
                NotificationManager)context.getSystemService(
                        android.content.Context.NOTIFICATION_SERVICE);

        // 定义Notification的各种属性
        Notification notification = new Notification(
                R.drawable.icon,"阅读器", 
                System.currentTimeMillis());
        // 将此通知放到通知栏的"Ongoing"即"正在运行"组中
        notification.flags |= Notification.FLAG_ONGOING_EVENT;
        // 表明在点击了通知栏中的"清除通知"后,此通知自动清除。
        notification.flags |= Notification.FLAG_AUTO_CANCEL
        notification.flags |= Notification.FLAG_SHOW_LIGHTS;
        notification.defaults = Notification.DEFAULT_LIGHTS;
        notification.ledARGB = Color.BLUE;
        notification.ledOnMS = 5000;

        // 设置通知的事件消息
        CharSequence contentTitle = "阅读器显示信息"; // 通知栏标题
        CharSequence contentText = "推送信息显示,请查看……"; // 通知栏内容

        Intent notificationIntent = new Intent(context,context.getClass());
        notificationIntent.setAction(Intent.ACTION_MAIN);
        notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        PendingIntent contentIntent = PendingIntent.getActivity(
         context, 0, notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);
        notification.setLatestEventInfo(
         context, contentTitle, contentText, contentIntent);
        // 把Notification传递给NotificationManager
        notificationManager.notify(0, notification);
    }

    // 取消通知
    public void cancelNotification(){
        NotificationManager notificationManager = (
                NotificationManager) context.getSystemService(
                        android.content.Context.NOTIFICATION_SERVICE);
        notificationManager.cancel(0);
    }
}

这里需要在配置文件中设置每个Activity以单任务运行,否则,每次返回原Activity时会新增加一个Activity。代码如下:

     `<activity   android:name="ShowMessageActivity" android:launchMode="singleTask"></activity>`