3.10 号码归属地显示风格 :自定义Toast

来源:互联网 发布:oracle 数据挖掘 编辑:程序博客网 时间:2024/05/22 06:56

1.创建WindowManager

2.创建一个方法,在方法中调用 wm.addView( view, params);的方法

            

view:只自定义Toast布局    params:系统Toast布局源码对象

 

 

 

 

 

 

 

 

 

 

 

----------------------------------------------------------------------------------------




/**
 * 来电时显示来电号码归属地的服务
 * @author Administrator
 *
 */
public class ShowAddressService extends Service {

       private TelephonyManager  tm;
       private MyListener listener;
       private BroadcastReceiver  receiver;
       private SharedPreferences  sp;
      
      
       //自定义Toast
      private View view;
      private WindowManager wm;
      // "半透明","活力橙","卫士蓝","苹果绿","金属灰"
      private static final int[] bgs = {R.drawable. call_locate_white,
      R.drawable. call_locate_orange, R.drawable. call_locate_blue,
    R.drawable.call_locate_green, R.drawable. call_locate_gray };
      
      @Override
      public IBinder onBind(Intent intent) {
            
             return null;
      }
      
      
      /**
       * 代码的方式创建广播接收者
       */
      private class OutCallReceiver  extends BroadcastReceiver{

             @Override
             public void onReceive(Context context, Intent intent) {
                  
                  String address = AddressDao.getAddress(getResultData(), context);
                  System. out.println(address+ ".....................");
             // Toast.makeText(context, address, 1).show();
                  showAddress(address);
                  
            }
            
      
      }
      
      
      /**
       * 服务创建的时候
       */
      @Override
      public void onCreate() {
        super.onCreate();
        sp=getSharedPreferences( "config", MODE_PRIVATE);
       
        //创建WindowManager
        wm = (WindowManager) getSystemService( WINDOW_SERVICE);
       
        //在服务创建时注册并开启广播
        receiver=new OutCallReceiver();
        IntentFilter  filter= new IntentFilter();
        filter.addAction( "android.intent.action.NEW_OUTGOING_CALL" );
        this.registerReceiver( receiver, filter);
       
         //创建电话管理者
        tm=(TelephonyManager) getSystemService( TELEPHONY_SERVICE);
        listener= new MyListener();  //初始化MyListener()
      
        //注册一个监听器,监听电话状态的改变
        tm.listen(listener, PhoneStateListener. LISTEN_CALL_STATE);
       
       
       
      }
      
      /**
       * 服务销毁的时候
       */
      @Override
      public void onDestroy() {
      super.onDestroy();
      
          //在服务销毁时结束广播
            unregisterReceiver( receiver);
             receiver = null;
         
             // 当服务停止的时候 取消电话监听
             tm.listen( listener, PhoneStateListener. LISTEN_NONE);
             listener = null;
      
      }
      
      
      
      
      /**
       * 电话状态的监听器
       *
       */
      public class MyListener  extends PhoneStateListener{
            
             @Override
             public void onCallStateChanged( int state, String incomingNumber) {
                   super.onCallStateChanged(state, incomingNumber);
                  
                   switch (state) {
                   case TelephonyManager. CALL_STATE_IDLE:   //空闲状态
                         if ( view != null) {
                               wm.removeView( view);    //电话挂断时,移除土司
                               view = null;
                        }
                         break;
                        
                  

            case TelephonyManager. CALL_STATE_RINGING //响铃状态
                  
                  String address = AddressDao.getAddress(incomingNumber,getApplicationContext());
                         // Toast.makeText(getApplicationContext(), address, 1).show();
                        showAddress(address);
                         break;
                        
             case TelephonyManager. CALL_STATE_OFFHOOK:   //接听状态
                        
                         break;      
                        
                  }
                  
                  
                  
            }
            
            
      }
      
      
      
      
      /**
       * 显示一个自定义的土司
       *
       * @param address
       */
      public void showAddress(String address) {
             //得到自定义土司的布局
             view = View. inflate(getApplicationContext(), R.layout.toast_address,null );
            TextView tv = (TextView) view.findViewById(R.id. tv_info);
            tv.setText(address);
             view.setBackgroundResource( bgs[ sp.getInt( "which", 0)]);

             //系统源码Toast设置修改
            WindowManager.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. format = PixelFormat. TRANSLUCENT;
            params. type = WindowManager.LayoutParams. TYPE_TOAST;
            
             //show出自定义土司
            wm.addView( view, params);
            

      }
      
      
      
      
      

}




 

 

 

原创粉丝点击