通常有距离传感器的手机,在通话中,如果贴近脸不,距离传感器会起作用,使屏幕熄屏以防止误操作。我现在的需求是,在这种情况下(接收到CALL_STATE_OFFHOOK广播时),需唤醒屏幕,如何实现?下面的代码无效,PhoneApp熄屏后,还做了其他的处理,使得下面代码不能电量屏幕。
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
WakeLock wl= pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP |
                 PowerManager.SCREEN_DIM_WAKE_LOCK |
                 PowerManager.ON_AFTER_RELEASE, "TAG");
wl.acquire();我想到两个方向:
1、利用上述类似的方法点亮屏幕。
    请问上述代码该如何修改?
2、进入我的程序前,更改手机“通话设置”中“通话中自动关闭屏幕”选项,突出程序时再改回来。
    请问如何修改“通话中自动关闭屏幕”设置?距离传感器通话中唤醒屏幕

解决方案 »

  1.   

    1.试着在wakelock前加上wakeUp
    2.需要修改data/datacom.android.provider.settings/db里面相应的键值.通过ContentProvider去修改.
      

  2.   

    感谢guoyoulei520!第一个方法我马上试试。
    第二个我也想过,但是找不到“通话中自动关闭屏幕”在db中具体是哪个键值。
      

  3.   

    因为PROXIMITY sensor灭屏之后你拿锁是点亮不了屏幕的,这个是在PowerManagerService处理了的
    你是做第三方应用的还是有系统源码?
    如果有系统源码的话就比较好改的,如果只是第三方应用的话可能不太好弄
      

  4.   

    第二个方向可能可行。我通过比较通话设置里“通话中自动关闭屏幕”,分别打开和关闭是的settings.db(用sqlitemanager打开)文件,发现里面有一个proximity_sensor的值在1和0之间改变。我试试用ContentProvider修改,看是否可行。
      

  5.   

    亲们,通过修改settings.db,问题解决。
    ContentResolver r = context.getContentResolver();
    String callscreenoff = Settings.System.getString(r, "proximity_sensor");
    if(callscreenoff.equals("1")){
        Settings.System.putString(r, "proximity_sensor", "0");
    }
      

  6.   

    这个数据库貌似是在4.0会后才加上去的
    这个会把p-sensor关掉了,记得之后要改回来哦,要不然p-sensor就无效了
      

  7.   

    这个数据库貌似是在4.0会后才加上去的
    这个会把p-sensor关掉了,记得之后要改回来哦,要不然p-sensor就无效了
    正解!