[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,一个TextVIewTextView定义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); 
} 
}

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5398.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论