android源代码 锁屏灭屏来电接通后立即息屏、通话过程中息屏对方挂断不亮屏
来源:互联网 发布:编译原理java版 编辑:程序博客网 时间:2024/04/20 08:59
在Android源码实际开发中遇到这样两个问题:锁屏灭屏来电接通后立即息屏、通话过程中息屏对方挂断不亮屏;由于唤醒亮屏的问题很多地方都用到,不想轻意修改其源码代码,怕引出其它更多的问题。
所以再解决这两个问题时,采用一个直接的办法,就是:锁屏灭屏来电接通后立即息屏,那么就点亮屏,几秒之后再释放;如果:通话过程中息屏对方挂断不亮屏,那么就点屏,几秒之后再释放;
这种亮屏的方法,可以放在电话监听的三个状态的 Call_STATE_IDLE与Call_State_OFFHooK中来做处理。
在这两个状态中会遇到这样一个问题:明明做一锁的释放,但屏还是暗亮点。一点不会黑屏下去不会待机。其实问题还时没有释放所有的亮屏锁,如果在状态Call_STATE_IDLE与Call_State_OFFHooK 中将锁new 多次,则每次产生的锁也是不一样的,即使时同一个锁名,但下面不会认同是同一个锁,故锁没有释放,不会息屏。所以在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(){
- @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();
- 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();
- }
- }
- android源代码 锁屏灭屏来电接通后立即息屏、通话过程中息屏对方挂断不亮屏
- android源代码 锁屏灭屏来电接通后立即息屏、通话过程中息屏对方挂断不亮屏
- android 视频通话开启呼叫等待后,来第三方的视频通话,接通后通话时间一直显示为0,过几秒之后视频通话自动挂断
- [Android实例]通话接通后震动提示
- [Android实例]通话接通后震动提示
- [Android实例]通话接通后震动提示
- Android通话接通震动
- Android通话接通监听
- android 自动挂断来电
- Android Sipdroid 对外通话建立过程分析,以及监听通话接通时刻
- android程序接通和挂断电话
- android 通过服务挂断来电
- 通话接通后震动提示 示例讲解
- Android接电话流程、Phone来电过程、phone上层来电话解析 接通电话
- Swift3.0拨打电话,获取通话状态(接通,挂断...)<CoreTelephony,CallKit.CXCallObserver>
- android 来电自动接听和自动挂断
- android 来电自动接听和自动挂断
- Android实现来电自动挂断实现机制
- 悟透JavaScript之原型真谛---(2)
- HP CQ45 CPU风扇声音大 解决
- 悟透JavaScript之原型真谛 ---(3)
- 30家最赚钱移动互联网公司出炉
- myeclipse 修改svn用户名和密码
- android源代码 锁屏灭屏来电接通后立即息屏、通话过程中息屏对方挂断不亮屏
- struts2 checkboxlist标签的使用简介
- 删除datatable的行后,出现“不能通过已删除的行访问该行的信息”的错误,即DeletedRowInaccessibleException
- 悟透JavaScript之编程的快乐
- MFCC(倒谱系数)的求法
- android滑动按钮事件
- JS多播事件处理问题小结
- 哈希表
- 解决民生银行个人网银、财付通与IE9 x64不兼容的问题。