android开发之Toast的多种应用
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也可以用来做来电显示。
版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。
android开发之Toast的多种应用的更多相关文章
- Android开发之Toast
第一次在博客园发布文章,就把我刚弄明白的关于Android开发中的提示设置,分享给大家. Toast是Android中经常用到的一个方法,用于简单的用户提示,经过摸索我发现了Toast的两种使用方式, ...
- Android开发之Toast解析
Toast是Android系统提供的一个显示消息提示的类,它的使用非常简单,用途很广,如软件的升级,可以用它进行提示:退出程序时,也可以用它进行提醒,输入限制的提醒,等等. 使用场景: 1.需要提示用 ...
- Android开发之ListView添加多种布局效果演示
在这个案例中展示的新闻列表,使用到ListView控件,然后在适配器中添加多种布局效果,这里通过重写BaseAdapter类中的 getViewType()和getItemViewType()来做判断 ...
- Android开发之Toast吐司的一个封装好的工具类。带有源代码java文件,
import android.content.Context; import android.widget.Toast; //Toast统一管理类 public class T { private T ...
- 【Android UI】Android开发之View的几种布局方式及实践
引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...
- Android开发之InstanceState详解
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- Android开发之Java必备基础
Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...
- Android开发之PopupWindow
/* * Android开发之PopupWindow * * Created on: 2011-8-8 * Author: blueeagle * Email: liujiaxiang@g ...
- Android 开发之旅:深入分析布局文件&又是“Hello World!”
http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...
随机推荐
- HTML5 Geolocation
http://diveintohtml5.info/geolocation.html http://msdn.microsoft.com/en-us/library/windows/apps/hh44 ...
- win10全系列官方MSDN原版系统安装密钥、版本区别、镜像下载地址与激活教程
微软发布win10正式版已经过去几天了,相信很多同学都心情高涨的装上了期待已久的win10系统,但也有很多同学面对win10系统的众多版本感到一脸茫然,的确,微软在win10系统版本上的划分确实有点多 ...
- [OJ] Find Minimum in Rotated Sorted Array II
LintCode 160. Find Minimum in Rotated Sorted Array II (Medium) LeetCode 154. Find Minimum in Rotated ...
- King(差分约束)
http://poj.org/problem?id=1364 题意真心看不大懂啊... 现在假设有一个这样的序列,S={a1,a2,a3,a4...ai...at}其中ai=a*si,其实这句可以忽略 ...
- javascript时间、随机数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Makefile自动生成头文件依赖
前言 Makefile自动生成头文件依赖是很常用的功能,本文的目的是想尽量详细说明其中的原理和过程. Makefile模板 首先给出一个本人在小项目中常用的Makefile模板,支持自动生成头文件依赖 ...
- 外部exe窗体嵌入winform
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...
- Selenium WebDriver + Grid2 + RSpec之旅(二)----Grid2的配置
Selenium WebDriver + Grid2 + RSpec之旅(二) ----Grid2的配置 为什么要使用Selenium-Grid 分布式运行大规模的TestCase 能够通过一个中央节 ...
- NIR相机
近红外(NIR)相机——专为低照度环境而设计的高灵敏度相机 近红外光”(Near-Infrared) 是介于可见光和中红外光间的电磁波,因此是不能被人眼所察觉到的.近红外优化工业相机广泛适用于交通监控 ...
- Android webView 正确的用法
Android webView 正确的用法 引言: 我在网络找了几个例子,基本上都有问题,<Android疯狂讲义>13.4中的源代码也有问题.终于在官网找到正确的用法.点我. 基本用法: ...