当前位置:操作系统 > 安卓/Android >>

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

在Android源码实际开发中遇到这样两个问题:锁屏灭屏来电接通后立即息屏、通话过程中息屏对方挂断不亮屏;由于唤醒亮屏的问题很多地方都用到,不想轻意修改其源码代码,怕引出其它更多的问题。
所以再解决这两个问题时,采用一个直接的办法,就是:锁屏灭屏来电接通后立即息屏,那么就点亮屏,几秒之后再释放;如果:通话过程中息屏对方挂断不亮屏,那么就点屏,几秒之后再释放;
   这种亮屏的方法,可以放在易做图听的三个状态的 Call_STATE_IDLE与Call_State_OFFHooK中来做处理。
   在这两个状态中会遇到这样一个问题:明明做一锁的释放,但屏还是暗亮点。一点不会黑屏下去不会待机。其实问题还时没有释放所有的亮屏锁,如果在状态Call_STATE_IDLE与Call_State_OFFHooK 中将锁new 多次,则每次产生的锁也是不一样的,即使时同一个锁名,但下面不会认同是同一个锁,故锁没有释放,不会息屏。所以在Call_STATE_IDLE与Call_State_OFFHooK中一定要限定new出来的锁只进行一次,并释放对应的锁。这样就可达到亮屏后,几秒钟(通过message来进行控制时间)再息屏。
   代码初记如下:
[java]
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(){ 
        @Override 
        public void handleMessage(Message msg) { 
            // TODO Auto-generated method stub 
            super.handleMessage(msg); 
            if (null != wl) { 
                wl.release(); 
            } 
        } 
         
    }; 
   
    Handler myHandler2 = new Handler(){ 
        @Override 
        public void handleMessage(Message msg2) { 
            // TODO Auto-generated method stub 
            super.handleMessage(msg2); 
            if (null != wl2) { 
                wl2.release(); 
            } 
        } 
         
    }; 
     
    //end 
 
//================================================ 
 
class TeleListener extends PhoneStateListener { 
 
        @Override 
        public 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; 
                   
 
                //end 
                break; 
            } 
 
            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(); 
  &nb
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,