`

Android——Notification(自定义通知)

 
阅读更多

RemoteView类

      RemoteView描述一个view,而这个view是在另一个进程显示的。需要用布局解析器布局资源文件。并且提供了可以修改View内容的一些简单基础的操作。

      RemoteView是用来描述一个跨进程显示的view,Android的通知是全局的、跨进程的,由于自定义的Notification和显示Notification是两个不同的进程。因此,自定义的Notification必须通过RemoteView才能显示

 

public RemoteViews(String packageName,int layoutId)

作用:创建RemoteViews对象 

packageName : 当前组件所在包的包名

layoutId :布局资源索引值

示例:

RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.notification);

notification.xml是自定义的布局文件

 

步骤6:接上篇文章的第5步:

 

RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.notification);
步骤7:设置通知的显示样式:
notification.contentView = contentView;
 

 

步骤8:发送通知 

mNotiManager.notify(R.id.btn_show,notification);
  
案例:通知栏更新进度条。
 
package com.example.test_notification;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RemoteViews;
import android.widget.Toast;

public class MainActivity2 extends Activity implements OnClickListener {
	NotificationManager mNotiManager;// 通知管理器
	Notification mNoti;// 通知
	Handler mHandler;// 处理消息
	private final int PROGRESS_MAX = 10;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main1);
		Button btnShow = (Button) findViewById(R.id.btn_show);
		btnShow.setOnClickListener(this);
		mNotiManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
		mHandler = new Handler() {
			public void handleMessage(android.os.Message msg) {
				mNoti.contentView.setProgressBar(R.id.progressBar1,
						PROGRESS_MAX, msg.what, false);
				Log.i("TAG", "progress=" + msg.what);
				// 发送新的通知
				mNotiManager.notify(R.id.btn_show, mNoti);
				if (msg.what == PROGRESS_MAX) {
					Toast.makeText(MainActivity2.this, "下载完成,请查看安装",
							Toast.LENGTH_LONG).show();
				}
			};
		};
	}

	@Override
	public void onClick(View v) {
		try {
			switch (v.getId()) {
			case R.id.btn_show:
				showNotify();
				upgrade();
				break;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void upgrade() {
		new Thread() {
			@Override
			public void run() {
				for (int i = 0; i <= PROGRESS_MAX; i++) {
					mHandler.sendEmptyMessage(i);
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}.start();
	}

	private void showNotify() {
		try {
			// 创建通知对象
			mNoti = new Notification(R.drawable.icon, "又来通知了哈哈",
					System.currentTimeMillis());
			mNoti.defaults |= Notification.DEFAULT_LIGHTS;
			mNoti.defaults |= Notification.DEFAULT_VIBRATE;
			mNoti.vibrate =new long[]{0,100,200,300};
			Intent intent = new Intent(this, MainActivity2.class);
			// 设置随时更新(第四个参数)
			PendingIntent pIntent = PendingIntent.getActivity(this, 1, intent,
					PendingIntent.FLAG_UPDATE_CURRENT);
			// 设置通知不可删除
			mNoti.flags = Notification.FLAG_ONGOING_EVENT;
			mNoti.contentIntent = pIntent;
			// 定义闪光灯
			// 路灯显示300毫秒然后关闭一分钟。如果设备不支持制定的颜色,则会按照最近的颜色显示。
			mNoti.ledARGB = 0xff00ff00;
			mNoti.ledOnMS = 300;
			mNoti.ledOffMS = 1000;
			mNoti.flags |= Notification.FLAG_SHOW_LIGHTS;
			// 自定义通知中显示的布局
			RemoteViews contentView = new RemoteViews(getPackageName(),
					R.layout.dialog);
			// 设置通知的显示样式
			mNoti.contentView = contentView;
			// 设置当前的进度之为1,即整个进度值的10%
			mNoti.contentView.setProgressBar(R.id.progressBar1, PROGRESS_MAX,
					1, false);
			// 发送通知
			mNotiManager.notify(R.id.btn_show, mNoti);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 

 

 

 

分享到:
评论

相关推荐

    博客《Uri详解之二——通过自定义Uri外部启动APP与Notification启动》对应源码

    博客《Uri详解之二——通过自定义Uri外部启动APP与Notification启动》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/44781557

    android开发入门与实战(下)

    7.8 温馨的提醒——Toast和Notification应用 7.8.1 实例操作演示 7.8.2 实例编程实现 7.9 本章小结 第8章 移动信息仓库——Android的数据存储操作 8.1 Android数据存储概述 8.2 轻轻地我保护——SharedPreferences...

    Android高手进阶教程与Android基础教程

    Android基础教程之----Android状态栏提醒(Notification,NotificationManager)的使用.doc Android基础教程之----SMS简单发送短信程序(两个模拟器之间的通信)!.doc Android基础教程之----动态更改屏幕方向的简单例子...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理...

    Google Android SDK开发范例大全的目录

    5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用-p178 5.9 搜索手机通讯录自动完成——使用ContentResolver-p82 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源...

    Google+Android+SDK开发范例大全

    6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送email通知——BroadcastReceiver与Intent整合 6.6 手机拨接状态——PhoneStateListener之onCallStateChanged 6.7 有来电,发送邮件通知——...

    Google Android SDK 开发范例大全01

    5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用-p178 5.9 搜索手机通讯录自动完成——使用ContentResolver-p82 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件...

    Google Android SDK 开发范例大全02

    5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用-p178 5.9 搜索手机通讯录自动完成——使用ContentResolver-p82 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件...

    Google Android sdk 开发范例大全 部分章节代码

    5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用-p178 5.9 搜索手机通讯录自动完成——使用ContentResolver-p82 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件...

    Google Android SDK开发范例大全(完整版)

    5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理...

    Android 5.0以上Toast不显示的解决方法

    用户使用android 5.0以上的系统在安装APP时,将消息通知的权限关闭掉了。实际上用户本意只是想关闭Notification,但是Toast的show方法中有调用INotificationManager这个类,而这个类在用户关闭消息通知权限的同时被...

    android开发资料大全

    android用户界面之Notification教程实例汇总 android用户界面之TextView教程实例汇总 android用户界面之ScrollView教程实例汇总 android用户界面之PopupWindow教程实例汇总 android用户界面之ImageView教程实例汇总 ...

    android群雄传

    第3章 Android控件架构与自定义控件详解 32 3.1 Android控件架构 33 3.2 View的测量 34 3.3 View的绘制 37 3.4 View Group的测量 38 3.5 View Group的绘制 39 3.6 自定义View 39 3.6.1 对现有控件进行拓展 40...

    《Google Android SDK开发范例大全(第3版)》.pdf

    2.3 android应用程序架构——从此开始 15 2.4 可视化的界面开发工具 18 2.5 部署应用程序到android手机 19 第3章 用户人机界面 22 3.1 更改与显示文字标签 23 3.2 更改手机窗口画面底色 24 3.3 ...

Global site tag (gtag.js) - Google Analytics