`
java-mans
  • 浏览: 11817179 次
文章分类
社区版块
存档分类
最新评论

android Notification的使用

 
阅读更多

今天给大家分享下Notification的使用,下面这个例子是通过将应用放到后台运行并在通知烂显示应用正在运行,点击通知返回最后操作的activity。

首先介绍下我的环境,我用的android1.6,大家都知道把程序放入后台除代码实现外,还可以按Home键,但是只有在2.0以后才能监听Home键事件,通过从写onAttachedToWindow ()方法然后把改变窗口的类型为WindowManager.LayoutParams.TYPE_KEYGUARD这样就能在onEvent()方法中拦截。但是1.6就比较蛋疼了,我采用的方法比较笨,虽然不能拦截Home键,但是我们可以利用Activity的生命周期来实现,当一个Activity从屏幕上消失时,调用的方法是onStop()---onPause()方法,其实这2个方法我们都可以使用。就是在这个方法里我们要判断我们当前的操作是Activity和Activity之间的跳转过程还是因为按了Home键才触发的,首先我定义了一个boolean属性来标识这个值,当我每次跳转activity的是时候就把这个值设置为true,反之则设置为false并且取消通知显示。如果当这个值为false的时候就把程序放到后台。这里需要注意的是如果是activity方法跳转这里需要在onResume()方法中再把这个boolean值设置成false。

下面是实现代码:

import android.app.Activity;
import android.os.Bundle;

import com.metarnet.customize.view.NotificationExtend;

public class BaseActivity extends Activity {

	public NotificationExtend notify;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}

	@Override
	protected void onResume() {
		super.onResume();
		if (notify != null) {
			notify.cancelNotification();
		}
	}

	protected void moveTaskToBack() {
		notify = new NotificationExtend(this);
		notify.showNotification();
	}
}

这是我写的一个activity的一个基类,方便每个activity实现功能。

下面是具体实现的activity类:

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.KeyEvent;

import com.metarnet.R;

/**
 * 
 * @author yangzhiqiang
 * 
 */
public class LoginActivity extends BaseActivity {

	private boolean isForward = false;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			// 如果是返回键就提示用户是否要将程序放入后台
			returnMaskTask();
		}
		return true;
	}

	private void returnMaskTask() {
		final AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle(R.string.common_prompt);
		builder.setMessage(R.string.login_alert_exit_info);
		builder.setNeutralButton(R.string.common_backgrounp,
				new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						//点击放入后台按钮就将调用moveTaskToBack(true)方法将程序放入后台这时候会调用onPause()方法
						//这是在onPause()方法中会调用父类的启动通知的方法
						isForward = false;
						moveTaskToBack(true);
					}
				});
		builder.setNegativeButton(R.string.common_cancel, null);
		builder.show();
	}

	@Override
	protected void onResume() {
		isForward = false;
		super.onResume();
	}

	@Override
	protected void onPause() {
		if (!isForward) {
			super.moveTaskToBack();
		}
		super.onPause();
	}

}

下面是通知的具体实现类:

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;

import com.metarnet.R;

/**
 * 显示通知
 * 
 * @author yangzhiqiang
 * 
 */
public class NotificationExtend {

	private Context context;

	public NotificationExtend(Context context) {
		super();
		this.context = context;
	}

	public void showNotification() {
		NotificationManager manager = (NotificationManager) context
				.getSystemService(Context.NOTIFICATION_SERVICE);

		Notification notification = new Notification(R.drawable.icon,
				context.getString(R.string.app_name),
				System.currentTimeMillis());

		// 设置通知不能被清除按钮清除也可以设置为FLAG_AUTO_CANCEL,表示可以清楚
		notification.flags |= Notification.FLAG_NO_CLEAR;
		// 这个标识将通知放入通知的正在运行栏目
		notification.flags |= Notification.FLAG_ONGOING_EVENT;
		notification.flags |= Notification.FLAG_SHOW_LIGHTS;
		notification.defaults = Notification.DEFAULT_LIGHTS;
		// 这里我是自定义通知的布局
		notification.contentView = new RemoteViews(context.getPackageName(),
				R.layout.custoim_notifition);
		notification.contentView.setImageViewResource(R.id.image,
				R.drawable.icon);
		notification.contentView.setTextViewText(R.id.title,
				context.getString(R.string.app_name));
		notification.contentView.setTextViewText(R.id.text,
				context.getString(R.string.notify_content));

		try {
			// 这里设置点击通知后将放回的activity,我这里设置的返回原activity
			Intent intent = new Intent(context, context.getClass());
			// 这里是设置activity的启动模式,分别有4种,我这里是用的FLAG_ACTIVITY_SINGLE_TOP作用是在返回的时候用原来的activity的实例而不是建立新的
			// 应为这个时候当前的activity在当前的activity栈顶
			intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
			PendingIntent pi = PendingIntent.getActivity(context, 0, intent,
					PendingIntent.FLAG_UPDATE_CURRENT);
			notification.contentIntent = pi;
			manager.notify(0, notification);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

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

其中PendingIntent中的PendingIntent.FLAG_UPDATE_CURRENT属性的作用是如果我在从系统中提取一个PendingIntent,而系统中有一个和你描述的PendingIntent对等的PendingInent, 那么系统会直接返回和该PendingIntent其实是同一token的PendingIntent,而不是一个新的tokenPendingIntent。如果我们使用了FLAG_UPDATE_CURRENT的话,新的Intent会更新之前PendingIntent中的Intent对象数据,当然也会更新Intent中的Extras

下面是效果图:

好了这里就讲完了,希望大家有什么好建议的可以提出来。o(∩_∩)o

分享到:
评论

相关推荐

    android Notification使用大全

    在Android系统中,Notification是应用与用户交互的重要方式,它可以在状态栏中显示信息,即使用户不在使用应用时也能提醒用户有新的事件发生。本文将深入探讨如何在Android中使用Notification,包括基本用法、自定义...

    Android NOtification 使用

    在Android系统中,Notification是应用与用户交互的重要方式,它能提醒用户有新的事件或信息需要处理,即使应用不在前台运行。Notification分为多种类型,包括Toast、StatusBar Notification和Dialog Notification,...

    android Notification使用例子

    本项目是一个基于Android 2.3(Gingerbread)版本的小实例,旨在帮助开发者学习如何使用Notification API创建和管理通知。 首先,创建Notification需要使用`NotificationCompat.Builder`类,它是Android Support ...

    Android Notification 使用方法详解

    Android Notification 使用方法详解 Android Notification 是 Android 系统中的一种重要组件,用于向用户显示重要信息和提示。Android Notification 使用方法详解中,我们将介绍如何使用 Android Notification ...

    Android Notification使用方法总结

    Android Notification使用方法总结 Android Notification是Android系统中的一种重要机制,用于向用户显示重要信息,例如来自应用程序的更新、警报、提醒等。下面是Android Notification使用方法总结的相关知识点: ...

    Android notification+Service实时更新

    在Android开发中,`Notification`、`Service`和`BroadcastReceiver`是三个核心组件,它们在许多场景下都有着重要的作用,特别是在实现应用后台运行、实时更新等任务时。本项目"Android notification+Service实时更新...

    Android Notification使用方法详解

    本篇文章将详细介绍如何在Android 4.0及以上版本中使用Notification,以及如何处理兼容性问题。 ### 链式调用创建Notification 在Android 4.0及以上版本,推荐使用`Notification.Builder`类通过链式调用来构建...

    android notification完全解析Demo

    在Android开发中,Notification是应用与用户交互的重要方式,它能够在状态栏中显示信息,即使用户不在应用程序中也能提醒用户有新的活动或消息。本文将深入解析Android Notification的工作原理、设计模式以及如何...

    Android Notification

    在Android系统中,通知(Notification)是用户界面中不可或缺的一部分,它允许应用在状态栏或者通知中心向用户传达重要信息,即使用户并未直接与应用交互。"Android Notification"这一主题聚焦于如何创建和管理用于...

    AndroidNotification

    "AndroidNotification"项目旨在整合Android平台上所有Notification的使用方法,这对于开发者来说是一个宝贵的资源,能够帮助他们理解和实践各种通知功能。 首先,我们来详细了解一下Android中的Notification。...

    Android Notification更新

    在Android系统中,Notification是应用与用户交互的重要方式之一,特别是在后台运行时,它能将信息传达给用户,如消息提醒、下载进度等。本文将深入探讨如何利用Android的Notification API来实现动态下载过程的可视化...

    Android Notification的使用

    这篇博客"Android Notification的使用"详细探讨了如何在Android应用程序中有效地利用Notification API来创建和管理通知。 首先,Notification的创建需要一个NotificationChannel。在Android Oreo(8.0)及以上版本...

    android Notification Demo

    "android Notification Demo" 是一个示例项目,旨在演示不同类型的Android通知及其使用方法。在这个项目中,开发者可能会探索如何创建各种通知,以适应不同的用户交互场景。 通知通常分为以下几种类型: 1. **普通...

    android Notification详解

    Notification 在 Android 系统中扮演着关键的角色,主要功能包括: 1. 提醒用户:当应用在后台运行或者没有在前台显示时,Notification 可以提供一种方式让用户知道应用的活动状态,例如邮件到达、消息通知、下载...

    Android实现Notification的通知栏常驻.zip

    在Android系统中,Notification是一种重要的用户界面元素,用于在状态栏显示应用的提醒或消息。当用户无法直接与应用交互时,例如手机锁屏或在其他应用中,Notification可以帮助用户了解应用的状态并进行相应的操作...

    Android notification进度条 demo

    在Android开发中,通知(Notification)是用户界面中不可或缺的一部分,它用于在状态栏中向用户传达应用的非即时信息,即使用户不在与该应用交互时也能接收到。本示例"Android notification进度条 demo"专门关注如何...

    android 8.0 notification 写法

    如果你的应用需要兼容更低版本的Android,可以使用`NotificationCompat`类提供的方法。 在`android-NotificationChannels-master`这个项目中,你可能会找到一个示例应用,它展示了如何创建和使用`...

Global site tag (gtag.js) - Google Analytics