android 自然灭屏过程,[现实]android源代码 锁屏灭屏来电接通后立即息屏、通话过程中息屏对方挂断不亮屏...

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

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

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

在这两个状态中会遇到这样一个问题:明明做一锁的释放,但屏还是暗亮点。一点不会黑屏下去不会待机。其实问题还时没有释放所有的亮屏锁,如果在状态Call_STATE_IDLE与Call_State_OFFHooK中将锁new多次http://www.msdnproject.com/

,则每次产生的锁也是不一样的,即使时同一个锁名,但下面不会认同是同一个锁,故锁没有释放,不会息屏。所以在Call_STATE_IDLE与Call_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(); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值