[android] 手机卫士自定义吐司
继续在之前监听来电的服务AddressService里,添加成员方法MyToast()
获取TextView对象,new出来,构造参数:上下文对象
调用TextView对象的setText()方法,设置文本
调用TextView对象的setTextSize()方法,设置大小,参数:int
调用TextView对象的setTextColor()方法,设置颜色
获取WindowManager对象,调用getSystemService()方法,参数:WINDOW_SERVICE
调用WindowManager对象的addView()方法,添加进视图,参数:View对象,WindowManager.LayoutParams对象
LayoutParams对象的设置参考Toast类的show()方法
此时,打电话和接电话会显示出来这个View,但是消不掉了
在之前判断来电的方法里,进行监听电话空闲状态,去除这个View
switch判断中添加TelephonyManager.CALL_STATE_IDLE
判空一下,判断TextView对象不为空
调用WindowManager对象的 removeView()方法,参数:View对象(上面添加的TextView)
使用布局文件
新建一个布局文件address_toast.xml
线性布局,横向排列,一个ImageView,一个TextVIew,TextView定义id
在自定义吐司的方法中
调用View.inflate()方法,获取View对象,参数:上下文,资源文件,null
添加这个View就可以了
package com.qingguow.mobilesafe.service; import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.TextView; import com.qingguow.mobilesafe.receiver.OutcallReceiver;
import com.qingguow.mobilesafe.utils.NumberQueryAddressUtil; /**
* 来电显示
*
* @author taoshihan
*
*/
public class AddressService extends Service {
private TelephonyManager tm;
private MyPhoneStateListener phoneStateListener;
private OutcallReceiver outcallReceiver;
private WindowManager wm;
private TextView view;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
/**
* 服务创建
*/
@Override
public void onCreate() {
super.onCreate();
tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
phoneStateListener = new MyPhoneStateListener();
tm.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); //注册广播
outcallReceiver=new OutcallReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("android.intent.action.NEW_OUTGOING_CALL");
registerReceiver(outcallReceiver, filter);
} private class MyPhoneStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
String info = NumberQueryAddressUtil
.queryAddress(incomingNumber);
//Toast.makeText(getApplicationContext(), info, 1).show();
//自定义吐司
myToast(info);
break;
case TelephonyManager.CALL_STATE_IDLE://空闲状态
if(view!=null){
wm.removeView(view);
}
break;
default:
break;
}
}
}
/**
* 服务销毁
*/
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//取消监听
tm.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
phoneStateListener=null;
//解除注册广播
unregisterReceiver(outcallReceiver);
outcallReceiver=null;
}
/**
* 自定义吐司
* @param info
*/
public void myToast(String info) {
wm=(WindowManager) getSystemService(WINDOW_SERVICE);
view=new TextView(getApplicationContext());
view.setText(info);
view.setTextColor(Color.GREEN);
view.setTextSize(18); LayoutParams params = new LayoutParams();
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
params.type = WindowManager.LayoutParams.TYPE_TOAST; wm.addView(view, params);
}
}
[android] 手机卫士自定义吐司的更多相关文章
- [android] 手机卫士自定义滚动控件
TextView控件设置单行显示 android:singleLine=”true” 设置TextView开始的位置显示省略号,android:ellipsize=”start” 设置滚动属性,and ...
- [android] 手机卫士自定义对话框布局
手机防盗页面部分 点击手机防盗,进行判断,如果没有设置密码,显示一个设置密码的对话框,如果已经设置密码了,弹出输入密码对话框 密码保存在SharedPreferences中,数据取出进行判断 自定义一 ...
- Android 手机卫士--自定义组合控件构件布局结构
由于设置中心条目中的布局都很类似,所以可以考虑使用自定义组合控件来简化实现 本文地址:http://www.cnblogs.com/wuyudong/p/5909043.html,转载请注明源地址. ...
- [android] 手机卫士自定义组合控件
设置中心 新建SettingActivity 设置GridView条目的点击事件 调用GridView对象的setOnItemClickListenner()方法,参数:OnItemClickList ...
- Android 手机卫士--弹出对话框
在<Android 手机卫士--解析json与消息机制发送不同类型消息>一文中,消息机制发送不同类型的信息还没有完全实现,在出现异常的时候,应该弹出吐司提示异常,代码如下: private ...
- Android 手机卫士--参照文档编写选择器
本文来实现<Android 手机卫士--导航界面1的布局编写>中的图片选择器部分的代码. 本文地址:http://www.cnblogs.com/wuyudong/p/5944356.ht ...
- Android 手机卫士--设置界面&功能列表界面跳转逻辑处理
在<Android 手机卫士--md5加密过程>中已经实现了加密类,这里接着实现手机防盗功能 本文地址:http://www.cnblogs.com/wuyudong/p/5941959. ...
- Android 手机卫士--确认密码对话框编写
本文接着实现“确认密码”功能,也即是用户以前设置过密码,现在只需要输入确认密码 本文地址:http://www.cnblogs.com/wuyudong/p/5940718.html,转载请注明出处. ...
- Android 手机卫士--签名文件说明&包名说明
在<Android 手机卫士--打包生成apk维护到服务器>一文中,实现了新版本的apk到服务器,当打开客户端apk的时候,发现有新版本,提示更新.还实现了利用xutils工具实现了从服务 ...
随机推荐
- 使用JQuery插件Jcrop进行图片截取
Jcrop插件本身并不含有图片截取功能,它仅仅是在前端层面构建一套截取动画效果并产生4个坐标点,插件使用者将这4个坐标点传回至服务器接口上进行截取操作.其优点是具有较高的通用性.浏览器兼容性(IE6+ ...
- Stack栈类与、Queue队列与线性表的区别和联系
栈和队列都属于特殊的线性表 一.定义 1.线性表(linear list): 是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列.数据元素是一个抽象的符号,其具体含义在不同的情 ...
- win32 音视频相关 api
waveInGetNumDevs waveInGetDevCaps waveInOpen waveInGetDevCaps waveInPrepareHeader waveInAddBuffer wa ...
- python求100以内素数
python求100以内素数之和 from math import sqrt # 使用isPrime函数 def isPrime(n): if n <= 1: return False for ...
- POJ 1018
#include<iostream> #define MAXN 105 #define inf 10000000 #include<vector> #include<io ...
- ★ phpStudy安装SSL证书实现https链接
[准备] (1)phpstudy下载:http://phpstudy.php.cn/ (2)phpstudy集成环境下正常运行的网站 (3)避免意外请先备份(复制)好httpd.conf配置文件 ...
- Opserver 初探三《服务器数据监控》
用Opserver 怎么像zabbix一样监控服务器呢,查看github官方说明,Opserver可用于连接任何支持Bosun, Orion, or direct WMI监控数据. Opserver ...
- jython实现java运行python代码
Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现.最近的一个项目需要将python代码转换成java实现,所以用了一 ...
- PL/SQL程序设计
1 PL/SQL简介 1 什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写.PL/SQL是对SQL语言 ...
- 编程开发(C/C++&Java&Python&JavaScript&Go&PHP&Ruby&Perl&R&Erlang)
使用Docker快速部署主流编程语言的开发.编译环境及其常用框架,包括C.C++.Java.Python.JavaScript.Go.PHP.Ruby.Perl.R.Erlang等. 在今后采用编程语 ...