@Override /** 监听电话状态 */ public void onCallStateChanged(int state, String incomingNumber) { // TODO Auto-generated method stub super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_RINGING: if (serviceState) { boolean falg = new BlackNumDao(ShowAddressService.this).find(incomingNumber); if (falg) { ringOff(); getContentResolver() .registerContentObserver( CallLog.Calls.CONTENT_URI, true, new CallLogChangeObserver(new Handler(), incomingNumber)); return; } } String value = AddressService.getAddressService(incomingNumber); view = inflater.inflate(R.layout.show_phone_address, null); TextView address_tv = (TextView) view.findViewById(R.id.show_phone_address_address); TextView phone_tv = (TextView) view.findViewById(R.id.show_phone_address_phone); address_tv.setText(value); String phoneName = new MyContentProvider(ShowAddressService.this).getPhoneName(incomingNumber); if (phoneName != null) { phone_tv.setText(phoneName); } else { phone_tv.setText(incomingNumber); } WindowManager.LayoutParams params = new LayoutParams(); params.height = WindowManager.LayoutParams.WRAP_CONTENT + 70; params.width = WindowManager.LayoutParams.WRAP_CONTENT + 200; params.y = params.y + 23; new Thread(new SaveParamsCoord(params.x, params.y, params.width, params.height)).start(); 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; params.setTitle("Toast"); windowManager.addView(view, params); break; case TelephonyManager.CALL_STATE_IDLE: if (view != null) { windowManager.removeView(view); view = null; } default: break; } }