• [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);
        }
    }
  • 相关阅读:
    递归---Day29
    File类---Day28
    线程池---Day26
    微信公众号运营人员必备的软件工具网站合集
    消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
    itoa函数的递归实现(二级指针实现)
    二叉树——查找两个任意节点的最近祖先
    C#多线程(二)
    C#多线程(一)
    Websocket协议之php实现
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5471162.html
Copyright © 2020-2023  润新知