我從事Android技術最近1年的工作。目前我想在Android 4.0.3中開發一個應用程序來電自動應答,但在這個版本中,我沒有得到任何解決方案或無法找到任何API(ITelephony.aidl)。請建議我。Android 4.0.3中的來電自動應答
回答
爲了回答或拒絕電話,需要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);
你能解釋一下你在這裏的邏輯嗎?據谷歌稱,KEYCODE_HEADSETHOOK掛斷了電話。我已經嘗試了幾種方法,但即使可以通過adb(adb shell input keyevent 5)分派事件KEYCODE_CALL,它也不會得到任何東西,並且它完美地工作。然而,我需要代碼。有任何想法嗎? – onetwopunch 2012-10-04 23:47:28
上面的代碼示例不適合你嗎? 此片段模擬按耳機按鈕,就好像耳機已連接。通常,當您單擊此按鈕時,它會應答呼叫和/或結束呼叫(如果已處於活動狀態)。 由於這是一種解決方法,它不會在所有設備上100%的時間內工作。這取決於OEM的內部實施。 – Guy 2012-10-09 07:24:58
請參閱我的問題:http://stackoverflow.com/questions/12805796/how-to-programmatically-answer-a-call-in-android-4-0-3 – onetwopunch 2012-10-09 21:26:36
其工作代碼。 首先找出使用電話狀態廣播接收器的來電。
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");
}
這個工作在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 測試這仍然給它處理的異常。
ACTION_HEADSET_PLUG的安全異常,未授予權限非系統應用程序。 :( – 2013-11-07 16:41:46
確實如此,但是您可以在Manifest中輸入權限,但是您的錯誤仍然存在,您可以從www.virtualmodelz.com下載該應用程序,該應用程序完美地工作。 – PravinDodia 2013-11-20 21:08:52
不適用於Android 4.2.2 :(。嘗試添加CALL_PRIVEGED權限。 – thomasa88 2014-01-14 14:45:04
- 1. android應答來電
- 2. 在android中自動應答
- 3. 自動應答
- 4. 自動接聽來電的Android programetically
- 5. 使用android.telecom和InCallService應答來電
- 6. 如何應答來電Twilio API
- 7. Android無法使用本地SIP應答來電
- 8. 應用程序崩潰與Android 4.0.3 url.openStream()在Android 4.0.3
- 9. Android 4.0.3並完成活動
- 10. 在PhoneStateListener中應答的傳出電話
- 11. C#在LYNC中自動應答呼叫
- 12. 自動接聽來電
- 13. Android 4.0.3無法在AVD中啓動
- 14. Android中的自定義來電屏幕
- 15. Android 4.0.3上的NetworkOnMainThreadException
- 16. NFC的Android 4.0.3上
- 17. 處理來自Android應用程序的來電
- 18. 自動應答Drupal 7的替代
- 19. 帶導軌的自動應答器
- 20. 在Android 4.0.3
- 21. 如何在來電時自動啓動我的android應用程序?
- 22. 來自iphone應用程序的自動電子郵件
- 23. iframe上的自適應自動應答器
- 24. 在表單提交中發送自動應答電子郵件腳本
- 25. Android應用自動來到前臺
- 26. Android:4.0.3模擬器在一段時間後自動關閉
- 27. 事件來識別Android中的呼叫應答
- 28. 提琴手自動應答時,在URL
- 29. SIP:檢測自動應答代理
- 30. 如何自動應答Linux終端
此問題是否解決?請跟進。 – Guy 2012-10-09 07:25:23