android源代码 锁屏灭屏来电接通后立即息屏、通话过程中息屏对方挂断不亮屏

来源:互联网 发布:深蓝算不算人工智能 编辑:程序博客网 时间:2024/04/17 00:44

Android源码实际开发中遇到这样两个问题:锁屏灭屏来电接通后立即息屏、通话过程中息屏对方挂断不亮屏;由于唤醒亮屏的问题很多地方都用到,不想轻意修改其源码代码,怕引出其它更多的问题。

所以再解决这两个问题时,采用一个直接的办法,就是:锁屏灭屏来电接通后立即息屏,那么就点亮屏,几秒之后再释放;如果:通话过程中息屏对方挂断不亮屏,那么就点屏,几秒之后再释放;

   这种亮屏的方法,可以放在电话监听的三个状态的 Call_STATE_IDLECall_State_OFFHooK中来做处理。

   在这两个状态中会遇到这样一个问题:明明做一锁的释放,但屏还是暗亮点。一点不会黑屏下去不会待机。其实问题还时没有释放所有的亮屏锁,如果在状态Call_STATE_IDLECall_State_OFFHooK中将锁new 多次,则每次产生的锁也是不一样的,即使时同一个锁名,但下面不会认同是同一个锁,故锁没有释放,不会息屏。所以在Call_STATE_IDLECall_State_OFFHooK中一定要限定new出来的锁只进行一次,并释放对应的锁。这样就可达到亮屏后,几秒钟(通过message来进行控制时间)再息屏。

   代码初记如下:

TelephonyManager mTelephonyMgr = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);mTelephonyMgr.listen(new TeleListener(),PhoneStateListener.LISTEN_CALL_STATE);//=============================    //Add by kylin 2011.11.22 begin        Handler myHandler = new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);if (null != wl) {wl.release();}}        };      Handler myHandler2 = new Handler(){@Overridepublic void handleMessage(Message msg2) {// TODO Auto-generated method stubsuper.handleMessage(msg2);if (null != wl2) {wl2.release();}}        };        //end//================================================class TeleListener extends PhoneStateListener {@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_IDLE: {        //Add by kylin 2011.10.21           String getElapsedTimeTemp=mCallCard.getElapsedTime().toString();    if(getElapsedTimeTemp!=null && !getElapsedTimeTemp.trim().equals("") && PhoneApp.getInstance().isVTCall()==false){//    if(PhoneApp.getInstance().isVTCall()==false){         getToast();         }            pm.setBtnBacklight(false);        mFlag=false;                 mFlag2 = false;                  //endbreak;}case TelephonyManager.CALL_STATE_OFFHOOK: {mFlag=true;pm.setBtnBacklight(true);if(!mFlag2){pm2=(PowerManager) getSystemService(Context.POWER_SERVICE);    wl2 = pm2.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "InCallScreen");//    wl2.setReferenceCounted(false);    wl2.acquire();    Message msg2 = new Message();    msg2.what = 200;    myHandler2.sendMessageDelayed(msg2, 5000);    mFlag2 = true;}break;}case TelephonyManager.CALL_STATE_RINGING: {pm.setBtnBacklight(true);break;}default:break;}}}//==================================private void getToast(){         if(mFlag==true){      pm=(PowerManager) getSystemService(Context.POWER_SERVICE);     wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "InCallScreen");     wl.acquire();         mFlag=false;          Message msg = new Message();     msg.what = 100;     myHandler.sendMessageDelayed(msg, 2000);        // wl.release();      }    }


 

原创粉丝点击