Android 2.3以上自动接听来电


因为Android2.3以上增加了对permission  android.permission.MODIFY_PHONE_STATE 的限制,2.3之前的通过反射机制调用ITelephone的能力的做法已经不适用

2.3上实现方式:

  1. public synchronized void answerRingingCall() {   
  2.         // 据说该方法只能用于Android2.3及2.3以上的版本上   
  3.         try {   
  4.             Intent localIntent1 = new Intent(Intent.ACTION_HEADSET_PLUG);   
  5.             localIntent1.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);   
  6.             localIntent1.putExtra("state"1);   
  7.             localIntent1.putExtra("microphone"1);   
  8.             localIntent1.putExtra("name""Headset");   
  9.             sendOrderedBroadcast(localIntent1,   
  10.                     "android.permission.CALL_PRIVILEGED");   
  11.             Intent localIntent2 = new Intent(Intent.ACTION_MEDIA_BUTTON);   
  12.             KeyEvent localKeyEvent1 = new KeyEvent(KeyEvent.ACTION_DOWN,   
  13.                     KeyEvent.KEYCODE_HEADSETHOOK);   
  14.             localIntent2.putExtra("android.intent.extra.KEY_EVENT",   
  15.                     localKeyEvent1);   
  16.             sendOrderedBroadcast(localIntent2,   
  17.                     "android.permission.CALL_PRIVILEGED");   
  18.             Intent localIntent3 = new Intent(Intent.ACTION_MEDIA_BUTTON);   
  19.             KeyEvent localKeyEvent2 = new KeyEvent(KeyEvent.ACTION_UP,   
  20.                     KeyEvent.KEYCODE_HEADSETHOOK);   
  21.             localIntent3.putExtra("android.intent.extra.KEY_EVENT",   
  22.                     localKeyEvent2);   
  23.             sendOrderedBroadcast(localIntent3,   
  24.                     "android.permission.CALL_PRIVILEGED");   
  25.             Intent localIntent4 = new Intent(Intent.ACTION_HEADSET_PLUG);   
  26.             localIntent4.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);   
  27.             localIntent4.putExtra("state"0);   
  28.             localIntent4.putExtra("microphone"1);   
  29.             localIntent4.putExtra("name""Headset");   
  30.             sendOrderedBroadcast(localIntent4,   
  31.                     "android.permission.CALL_PRIVILEGED");   
  32.         } catch (Exception e) {   
  33.             e.printStackTrace();   
  34.         }   
  35.     }  

相关内容