Android常用的反馈系统状态信息的方式主要有三种

  1. Toast提醒
  2. 通知栏提醒
  3. 对话框提醒

三种提醒分别适用于页面的提示、系统交互事件的通知和非常重要的提醒;

一、Toast

        Toast toast = Toast.makeText(MainActivity.this, "Toast 通知", Toast.LENGTH_SHORT);
toast.show();

Toast提醒最最简单方便的,默认情况下Toast显示在Activity下文水平居中,不过也可以通过代码设置为显示在其他位置

        toast.setGravity(Gravity.CENTER, 0, 0);

如果普通的文本无法满足要求,还可以设置自定义的View

        toast.setView(view);

二、Notification
  Notification更适用于交互事件的通知,常用于短信、即时消息、下载、外围设备的状态变化场景,支持文字显示、振动、三色灯、振铃音等多种提示形式,默认情况下,Notification只显示消息标题\消息内容\时间三项;

Android提供了一个Notification管理器NotificationManager,我们可以通过NotificationManager来控制一个Notification的显示与消除;

1。快速显示Notification

    public void showNotification() {
NotificationManager notiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent(LoginActivity.this, LoginActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(
LoginActivity.this, 0, intent, 0); // contentIntent
Notification noti = new Notification();
noti.icon = R.drawable.ic_launcher; // 通知的图标
noti.tickerText = "tickerText"; // 在通知显示前,在手机状态栏会有一个快速的通知,
noti.flags = Notification.FLAG_AUTO_CANCEL;// 设置通知被点击后自动取消
noti.setLatestEventInfo(this, "Title", "Notification Content",
contentIntent);
// 指定notification的Context对象,标题,内容,以及点击对应的contentIntent
notiManager.notify(12, noti);
}

2。上面的代码快速的显示了一个Notification,我们还可以对Notification进行一些个性化的设定,比如指定提示音,震动方式等;

        noti.defaults = Notification.DEFAULT_SOUND;// 使用默认的提示声音
noti.defaults |= Notification.DEFAULT_VIBRATE;// 添加默认震动方式

除了使用默认的震动方式,还可以自定义震动方式,自定义提示声音等;

>>1.自定义振动方式:

        Notification noti = new Notification();
noti.vibrate = new long[] { 0, 700, 500, 1000 }; // 延迟0秒,振动0.7秒,延迟0.5秒,再振动1秒

>>2.三色灯

        noti.flags |= Notification.FLAG_SHOW_LIGHTS; // 设置标志位为FLAG_SHOW_LIGHTS之后才能显示三色灯,如果设置为默认的话:DEFAULTS_LIGHTS;
noti.ledARGB = Color.parseColor("#00000000");
noti.ledOffMS = 300;
noti.ledOnMS = 300;

>>3.铃声提醒

        noti.sound = Uri.parse("filepath");
noti.defaults |= Notification.DEFAULT_SOUND; // 默认铃声

>>4.提醒标志位

FLAG_SHOW_LIGHTS //三色灯
FLAG_ONGOING_EVENT //发起事件
FLAG_INSISTENT //铃声将持续到notification取消或notificaton窗口打开
FLAG_ONLT_ALERT_ONCE //发起notification后,铃声或振动只执行一次
FLAG_AUTO_CALCEL //单击后自动消失
FLAG_NO_CLEAR //只有全部清除时,notification都会被清除
FLAG_FOREGROUND_SERVICE //表示正在运行的服务

>>5.针对意图的包装对象,为了使Notification能够响应点击事件,需要设置notification的contentIntent对象

            Intent intent = new Intent(this.getApplicationContext(),this.getClass());
// 设置Intent.FLAG_ACTIVITY_NEW_TASK
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0); // 生成PendingIntent对象

3。清除Notification

清除Notification有两种方式

>>1.通过NotificationManager来清除

notiManager.cancel(12); // 传入Notification显示时的id

>>2.通过Intent来清除

在执行清除Notification操作时,通过设计notification的deleteIntent变量可以响应这个事件;

            Notification noti = new Notification();
Intent deleteIntent = new Intent();
deleteIntent.setClass(LoginActivity.this, this.getClass());
deleteIntent.setAction(Intent.ACTION_DELETE);
noti.deleteIntent = PendingIntent.getBroadcast(
getApplicationContext(), 0, deleteIntent, 0);
notiManger.notify(12, noti); // 同样需要传入Notification显示时的id

为了响应紧急事件(如来电),需要设置Notification的fullScreenIntent变量

        Notification noti = new Notification();
Intent deleteIntent = new Intent();
deleteIntent.setClass(getApplicationContext(), null);
deleteIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
noti.fullScreenIntent = PendingIntent.getActivity(getApplicationContext(), 0, deleteIntent, 0);

4。上面所说的是最简单的Notification,有时候我们会看到一些各式各样布局的Notification,它其实是通过RemoteViews来实现的;下面是模仿下载文件的一个例子;

>>1.定义一个layout,里面定义了notification的显示界面;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="64dp"
android:orientation="horizontal" > <ImageView
android:id="@+id/noti_iv"
android:layout_width="64dp"
android:layout_height="match_parent"
android:scaleType="center" /> <ProgressBar
android:id="@+id/noti_pb"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="20.0dip"
android:layout_marginRight="20.0dip" /> </LinearLayout>

在这个xml文件中,定义了一个ImageView和ProgressBar,分别用来显示notification的图标和下载进度;

>>2.编写Java代码实现

public class LoginActivity extends Activity {
String tag = "LoginActivity";
private int progress = 0;
private Notification noti;
private NotificationManager notiManger;
private Handler handler; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_logion);
notiManger = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
progress += 5;
getNotification(LoginActivity.this, progress);
notiManger.notify(1024, noti);
if (progress == 100) {
notiManger.cancel(1024);
return;
}
sendEmptyMessageDelayed(0, 1000);
}
};handler.sendEmptyMessageDelayed(0, 2000);
}    private Notification getNotification(Context context, int progress) {
if (noti == null) {
noti = new Notification();
noti.icon = R.drawable.ic_launcher;
noti.tickerText = "正在下载新版本...";
}
noti.flags = Notification.FLAG_NO_CLEAR; // 设置Notification为不可清除 // 指定个性化视图
RemoteViews rv = new RemoteViews(context.getPackageName(),
R.layout.app_update_noti);
rv.setImageViewResource(R.id.noti_iv, R.drawable.ic_launcher); // 设置icon
rv.setProgressBar(R.id.noti_pb, 100, progress, false); // 设置progressbar进度
Intent intent = new Intent(context, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
intent, PendingIntent.FLAG_CANCEL_CURRENT);
noti.contentView = rv;
// 指定内容意图
noti.contentIntent = contentIntent;
return noti;
}
}

通过上面的代码,就可以看到一个在通知栏不断更新进度的通知;

主要有两点需要注意,一是添加一个为 Notification.FLAG_NO_CLEAR 的 flags ,二是指定notification#contentView为一个RemoteViews;

三、对话框提醒

Android 通知机制 Toast和Notification的更多相关文章

  1. Android应用程序组件Content Provider的共享数据更新通知机制分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6985171 在Android系统中,应用程序组 ...

  2. Android中的消息通知(NotificationManager和Notification)

    下面来谈谈notification,这个notification一般用在电话,短 信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提示用户处理这个通知,这时手从上方滑动状态栏就可以展开并处理这 ...

  3. Android 通知(Notification)

    1.介绍 2.常用属性 3.java后台代码 package com.lucky.test30notification; import android.app.Notification; import ...

  4. [iOS基础控件 - 6.10] Notification 通知机制

    A.定义      iOS程序都有一个NSNotificationCenter的单例对象,用来负责发布不同对象之间的通知      任何对象都能够在NSNotificationCenter发布通知,发 ...

  5. Android开发之漫漫长途 ⅥI——Android消息机制(Looper Handler MessageQueue Message)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  6. Android开发之漫漫长途 Ⅶ——Android消息机制(Looper Handler MessageQueue Message)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  7. Binder对象死亡通知机制

    本文參考<Android系统源码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码:        ~/Android/frameworks/base/libs/bin ...

  8. Android随笔之——Android广播机制Broadcast详解

    在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理.这个广播跟我们传统意义中的电台广播有些相似之处.之所以叫做广播,就 ...

  9. Android广播机制的深入学习

    部分内容转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者 ...

随机推荐

  1. 2019年猪年海报PSD模板-第二部分

    14套精美猪年海报,免费猪年海报,下载地址:百度网盘,https://pan.baidu.com/s/1sH0U5oU-LQlaxnaWxPCrrg              

  2. 一步一步图文介绍SpriteKit使用TexturePacker导出的纹理集Altas

    1.为什么要使用纹理集? 游戏是一种很耗费资源的应用,特别是在移动设备中的游戏,性能优化是非常重要的 纹理集是将多张小图合成一张大图,使用纹理集有以下优点: 1.减少内存占用,减少磁盘占用: 2.减少 ...

  3. 【movable-area、movable-view】 可移动区域组件说明

    movable-area.movable-view 可移动区域组件 原型: <movable-area scale-area="[Boolean]"> <mova ...

  4. 【转】MMORPG游戏服务器技能系统设计:表格字段与技能程序框架

    本文主要从一个程序员的角度阐述一下mmorpg服务器技能系统的程序框架设计,最近在做这个,就当做一个总结吧,其中某些概念可能没有解释清楚,欢迎大家拍砖讨论~ 技能其实是战斗系统的一个组成部分,战斗基本 ...

  5. .net转PHP从零开始-环境的搭建

    PHP初级开发环境安装很简单,只需要使用一键安装的phpstudy 下载地址:http://www.phpstudy.net/ 安装后可以看到 这样的界面,设置好相关的配置,然后,选择查看phpinf ...

  6. Python3 数据类型-元组

    Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 实例1(Python3.0+): tu ...

  7. BZOJ 4176 Lucas的数论 莫比乌斯反演+杜教筛

    题意概述:求,n<=10^9,其中d(n)表示n的约数个数. 分析: 首先想要快速计算上面的柿子就要先把d(ij)表示出来,有个神奇的结论: 证明:当且仅当a,b没有相同的质因数的时候我们统计其 ...

  8. Android - 时间 日期相关组件

    源码下载地址 : -- CSDN :  http://download.csdn.net/detail/han1202012/6856737 -- GitHub : https://github.co ...

  9. 【转载】【翻译】Breaking things is easy///机器学习中安全与隐私问题(对抗性攻击)

    原文:Breaking things is easy 译文:机器学习中安全与隐私问题(对抗性攻击) 我是通过Infaraway的那篇博文才发现cleverhans-blog的博客的,这是一个很有意思的 ...

  10. iOS-UISearchController用法

    import "ViewController.h" @interface ViewController ()<UITableViewDelegate,UITableViewD ...