Toast最基本的功能就是弹出一个弱提示,这个很简单我就不说了,说说Toast一些其他的作用。

来公司的时候,公司产品的1.0版本已经发布出去了,但是1.0是一个必须联网才能使用的产品,在2.0中想让用户离线也可以用,但是离线的话要在标题栏下面有一个提示,说明目前处于离线状态,这个本来也是本简单的事情,但是由于前期的产品是多个人开发的,导致标题栏竟然用了四五个标题,公共的Activity有5个,这样改起来工作量非常大,后来经过思考之后我决定在Application的子类中一次性解决这个问题,使用的控件就是Toast。

正常情况下,Toast显示的最长时间就是Toast.LENGTH,这个值是3.5秒,根本不能满足要求,我希望整个App在没网状态下运行的时候都能显示出来,并且当程序退出或者转入后台运行时结束,那么我的解决方案是使用一个线程,再使用while(true)循环,在循环中根据条件决定Toast是否显示。另外Toast的布局和显示位置我也通过自定义来处理。

好了,废话不多说,上代码:

public class MyApplication extends Application {

    private BroadcastReceiver receiver;
private Toast toast = null;
private boolean isNotNet = false;
private boolean isQuit = false; @Override
public void onCreate() {
super.onCreate(); initToast();
//acitivty调用生命周期方法时会回调这里的方法
this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override
public void onActivityStopped(Activity activity) {
isQuit = isApplicationBroughtToBackground(MyApplication.this);
toast.cancel();
} @Override
public void onActivityStarted(Activity activity) {
isQuit = isApplicationBroughtToBackground(MyApplication.this);
showToast();
} @Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override
public void onActivityResumed(Activity activity) { } @Override
public void onActivityPaused(Activity activity) { } @Override
public void onActivityDestroyed(Activity activity) {
isQuit = isApplicationBroughtToBackground(MyApplication.this);
toast.cancel();
} @Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) { }
});
} private void initToast() {
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
toast = Toast.makeText(MyApplication.this, "有网",
Toast.LENGTH_SHORT);
//拿到自定义的Toast布局
View view = LayoutInflater.from(MyApplication.this)
.inflate(R.layout.layout_toast, null);
//设置Toast的位置在顶部,x轴偏移量为0,Y轴偏移量为140
toast.setGravity(Gravity.TOP, 0, 140);
toast.setView(view);
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo networkInfo = connectivityManager
.getActiveNetworkInfo();
if (networkInfo == null) {// 断网
isNotNet = true;
showToast();
} else {// 有网
isNotNet = false;
}
}
} }; // 注册广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(receiver, intentFilter); }
private void showToast() {
new Thread(new Runnable() { @Override
public void run() {
try {
// for (int i = 0; i < 2000; i++) {
while(true){
//没网并且程序没有退出
if (isNotNet && !isQuit) {
// execToast(toast);
toast.show();
Thread.sleep(1000);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start(); } private void execToast(final Toast t) {
// Timer timer = new Timer();
// timer.schedule(new TimerTask() {
//
// @Override
// public void run() {
// // 调主线程方法,否则可能会显示不出来。
// initToast(t);
// }
//
// private void initToast(Toast t) {
// t.show();
// }
//
// }, 0);
t.show();
} /**
* 判断程序是否转入后台运行
* @param context
* @return
*/
public boolean isApplicationBroughtToBackground(
final Context context) {
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(
context.getPackageName())) {
return true;
}
}
return false;
}
}

关于Application的用法可以查看android开发之重写Application类,需要以下权限:

    <!-- 判断网络状态 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 判断程序是否在后台运行 -->
<uses-permission android:name="android.permission.GET_TASKS" />

最后再说一句,Toast也可以用来做来电显示。

本项目下载http://pan.baidu.com/s/1qWmRlt6

版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

android开发之Toast的多种应用的更多相关文章

  1. Android开发之Toast

    第一次在博客园发布文章,就把我刚弄明白的关于Android开发中的提示设置,分享给大家. Toast是Android中经常用到的一个方法,用于简单的用户提示,经过摸索我发现了Toast的两种使用方式, ...

  2. Android开发之Toast解析

    Toast是Android系统提供的一个显示消息提示的类,它的使用非常简单,用途很广,如软件的升级,可以用它进行提示:退出程序时,也可以用它进行提醒,输入限制的提醒,等等. 使用场景: 1.需要提示用 ...

  3. Android开发之ListView添加多种布局效果演示

    在这个案例中展示的新闻列表,使用到ListView控件,然后在适配器中添加多种布局效果,这里通过重写BaseAdapter类中的 getViewType()和getItemViewType()来做判断 ...

  4. Android开发之Toast吐司的一个封装好的工具类。带有源代码java文件,

    import android.content.Context; import android.widget.Toast; //Toast统一管理类 public class T { private T ...

  5. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  6. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  7. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  8. Android开发之PopupWindow

      /* *  Android开发之PopupWindow * *  Created on: 2011-8-8 *  Author: blueeagle *  Email: liujiaxiang@g ...

  9. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

随机推荐

  1. uva 1335 - Beijing Guards

    竟然用二分,真是想不到: 偶数的情况很容易想到:不过奇数的就难了: 奇数的情况下,一个从后向前拿,一个从前向后拿的分配方法实在太妙了! 注: 白书上的代码有一点点错误 代码: #include< ...

  2. [OJ] Find Minimum in Rotated Sorted Array

    LintCode 159. Find Minimum in Rotated Sorted Array (Medium) LeetCode 153. Find Minimum in Rotated So ...

  3. [笔记] 走进 Pocket,看看只有 20 位员工的 Pocket 是如何搞定 2000 万用户的

    走进 Pocket,看看只有 20 位员工的 Pocket 是如何搞定 2000 万用户的 保持专注. 不断更新优先级. 对产品有主人翁意识. (觉得做好产品是自己的职责, 不是应付工作) 你的用户如 ...

  4. Android事件分发详解(三)——ViewGroup的dispatchTouchEvent()源码学习

    package cc.aa; import android.os.Environment; import android.view.MotionEvent; import android.view.V ...

  5. word在线编辑\生成图片(包含截图与合并)

    1.业务原因 word编辑后的文章复制到html编辑器(fck等)会发生排版错乱的情况,于是混沌了.需要有一个新的方法来终结,于是产生了word能不能在线编辑,后台保存,前台显示灯一系列问题. 2.首 ...

  6. ☀【JS组织】pageA_init, pageB_init

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  7. 动态规划(区间DP):HDU 5115 Dire Wolf

    Dire wolves, also known as Dark wolves, are extraordinarily large and powerful wolves. Many, if not ...

  8. HDOJ--1698

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. HDU-1395 2^x mod n = 1

    http://acm.hdu.edu.cn/showproblem.php?pid=1395 怎样取余是关键.. 2^x mod n = 1 Time Limit: 2000/1000 MS (Jav ...

  10. HDU-1874 畅通工程续 (最短路径启蒙题)

    hdu 1874比较基础,拿来练各种刚学会的算法比较好,可以避免好多陷阱,典型的最短路模板题 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memor ...