2012-07-25 64 views
2

我從事Android技術最近1年的工作。目前我想在Android 4.0.3中開發一個應用程序來電自動應答,但在這個版本中,我沒有得到任何解決方案或無法找到任何API(ITelephony.aidl)。請建議我。Android 4.0.3中的來電自動應答

+0

此問題是否解決?請跟進。 – Guy 2012-10-09 07:25:23

回答

0

爲了回答或拒絕電話,需要MODIFY_PHONE_STATE權限。不幸的是,從2.3開始,它只能用於系統應用程序。 (更多信息here

一種解決方法接聽電話(最初從here):

Intent i = new Intent(Intent.ACTION_MEDIA_BUTTON); 
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_HEADSETHOOK); 
i.putExtra(Intent.EXTRA_KEY_EVENT, event); 
context.sendOrderedBroadcast(i, null);   
+1

你能解釋一下你在這裏的邏輯嗎?據谷歌稱,KEYCODE_HEADSETHOOK掛斷了電話。我已經嘗試了幾種方法,但即使可以通過adb(adb shell input keyevent 5)分派事件KEYCODE_CALL,它也不會得到任何東西,並且它完美地工作。然而,我需要代碼。有任何想法嗎? – onetwopunch 2012-10-04 23:47:28

+0

上面的代碼示例不適合你嗎? 此片段模擬按耳機按鈕,就好像耳機已連接。通常,當您單擊此按鈕時,它會應答呼叫和/或結束呼叫(如果已處於活動狀態)。 由於這是一種解決方法,它不會在所有設備上100%的時間內工作。這取決於OEM的內部實施。 – Guy 2012-10-09 07:24:58

+0

請參閱我的問題:http://stackoverflow.com/questions/12805796/how-to-programmatically-answer-a-call-in-android-4-0-3 – onetwopunch 2012-10-09 21:26:36

2

其工作代碼。 首先找出使用電話狀態廣播接收器的來電。

filter.addAction("android.intent.action.PHONE_STATE"); 
    mContext.registerReceiver(myCallReceiver, filter); 

,然後在的onReceive(上下文範圍內,意圖意圖)調用answerPhoneHeadsethook()函數。

private void answerPhoneHeadsethook(Context context) { 
    // Simulate a press of the headset button to pick up the call 
    Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(
      KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK)); 
    context.sendOrderedBroadcast(buttonDown, 
      "android.permission.CALL_PRIVILEGED"); 

    // froyo and beyond trigger on buttonUp instead of buttonDown 
    Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(
      KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); 
    context.sendOrderedBroadcast(buttonUp, 
      "android.permission.CALL_PRIVILEGED"); 
} 
0

這個工作在Android 2.2到4.0,現在加入嘗試捕捉到它適用於4.1.2和4.2的最後一個行之後老實說不知道它是如何工作的,但它爲我工作。

  Log.d(tag, "InSecond Method Ans Call"); 
    // froyo and beyond trigger on buttonUp instead of buttonDown 
    Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(
      KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); 
    sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 
Intent headSetUnPluggedintent = new Intent(Intent.ACTION_HEADSET_PLUG); 
    headSetUnPluggedintent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
    headSetUnPluggedintent.putExtra("state", 0); 
    headSetUnPluggedintent.putExtra("name", "Headset"); 
    try { 
     sendOrderedBroadcast(headSetUnPluggedintent, null); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

這是Android 4.1.2爲我工作,以及我對4.2 測試這仍然給它處理的異常。

+0

ACTION_HEADSET_PLUG的安全異常,未授予權限非系統應用程序。 :( – 2013-11-07 16:41:46

+0

確實如此,但是您可以在Manifest中輸入權限,但是您的錯誤仍然存​​在,您可以從www.virtualmodelz.com下載該應用程序,該應用程序完美地工作。 – PravinDodia 2013-11-20 21:08:52

+0

不適用於Android 4.2.2 :(。嘗試添加CALL_PRIVEGED權限。 – thomasa88 2014-01-14 14:45:04