你的位置:首页 > 操作系统

[操作系统][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.

线性布局,横向排列,一个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);  }}