[android] 手机卫士自定义吐司
2023-02-18 15:47:11 时间
继续在之前监听来电的服务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); } }
相关文章
- Bootstrap 布局
- Bootstrap 网格系统
- Android Hello World实例
- Bootstrap 滚动监听
- Android 资源(Resources)管理
- Bootstrap 网格系统
- Bootstrap 滚动监听
- Bootstrap 排版
- Android 意图(Intent)和过滤器(Filter)
- Android 概述
- 开发H5程序或者小程序的时候,后端Web API项目在IISExpress调试中使用IP地址,便于开发调试
- 基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
- 使用uView UI+UniApp开发微信小程序--微信授权绑定和一键登录系统
- 使用uView UI+UniApp开发微信小程序--判断用户是否登录并跳转
- 使用uView UI+UniApp开发微信小程序
- 循序渐进BootstrapVue,开发公司门户网站(6)--- 门户网站后端内容管理
- 循序渐进BootstrapVue,开发公司门户网站(5)--- 使用实际数据接口代替本地Mock数据
- 循序渐进BootstrapVue,开发公司门户网站(4)--- 使用b-carousel-slide组件实现图片轮播以及vue-awesome-swiper实现图片滑动展示
- 循序渐进BootstrapVue,开发公司门户网站(3)--- 结合邮件发送,收集用户反馈信息
- 在Bootstrap开发框架基础上增加WebApi+Vue&Element的前端