是否有任何方法可以檢測到撥出電話已成功接收或應答?我正在使用Intent.ACTION_CALL撥打電話,PhoneCallListener在撥出電話時找到呼叫的狀態,但我無法實現此目的。這在android中可能嗎?Android - 如何檢測撥出電話已接聽或接聽?
回答
在這個問題上深深的工作之後,我得出這個結論:
- PhoneStateListener不會撥出電話的工作,它調用摘機代替鈴聲,並摘機不會被調用的答案。
使用NotificationListenerService,您可以偵聽與撥出呼叫相關的已發佈通知。你可以做下面的代碼。這裏的問題是,我是無法從某些三星手機獲得通知文本,而且它自己的文本可能會在一部手機之間發生很大變化。 此外它需要API 18及以上。
public class NotificationListener extends NotificationListenerService { private String TAG = this.getClass().getSimpleName(); @Override public void onNotificationPosted(StatusBarNotification sbn) { Log.i(TAG, "Notification Posted"); Log.i(TAG, sbn.getPackageName() + "\t" + sbn.getNotification().tickerText + "\t" + sbn.getNotification().extras.getString(Notification.EXTRA_TEXT); Bundle extras = sbn.getNotification().extras; if ("Ongoing call".equals(extras.getString(Notification.EXTRA_TEXT))) startService(new Intent(this, ZajilService.class).setAction(ZajilService.ACTION_CALL_ANSWERED)); else if ("Dialing".equals(extras.getString(Notification.EXTRA_TEXT))) startService(new Intent(this, ZajilService.class).setAction(ZajilService.ACTION_CALL_DIALING)); } @Override public void onNotificationRemoved(StatusBarNotification sbn) { Log.i(TAG, "********** onNotificationRemoved"); Log.i(TAG, "ID :" + sbn.getId() + "\t" + sbn.getNotification().tickerText + "\t" + sbn.getPackageName()); } }
使用AccessibilityService,它比NotificationListenerService更基本的,我想這是所有的API支持。但也使用AccessibilityService,某些電話在發出呼叫的情況下不發佈有用的事件。回答。在大多數電話中,一旦通話應答,通話持續時間將會發生;它的打印輸出看起來是這樣的:
onAccessibilityEvent事件類型:TYPE_WINDOW_CONTENT_CHANGED; EventTime:21715433;包名:com.android.incallui; MovementGranularity:0;操作:0 [ClassName: android.widget.TextView;文本:[];內容描述:0分鐘0 秒; onAccessibilityEvent EventType:TYPE_WINDOW_CONTENT_CHANGED; EventTime:21715533;包名:com.android.incallui; MovementGranularity:0;操作:0 [ClassName: android.widget.TextView;文本:[];內容描述:0分鐘1 秒;
- API 23有一個新類,Call。它有更詳細的通話狀態; STATE_ACTIVE。您可以通過InCallService來替換手機的默認InCallUI,但我沒有嘗試使用它,但無論如何,它僅限於API 23,棉花糖。
作爲結論,您需要構建一個組合NotificationListener和AccessibilityService的解決方案,以便覆蓋所有電話,希望。
如果您有關於輔助功能方法的一些代碼,請向我們展示(或者鏈接到)。謝謝 – 2016-06-01 02:45:05
嗨穆罕默德Qandeel,你想分享完整的代碼?如AndroidManifest和實現您的答案所需的其他類。謝謝。 – danisupr4 2016-10-07 06:56:52
好的工作似乎很有希望 – 2017-01-04 18:27:32
- 1. 收聽撥出電話
- 2. android:在接聽電話時在後臺撥打電話
- 3. 撥打或接聽電話偷偷編程的Android
- 4. 如何在接聽者接聽電話時發出提示?
- 5. Android:如何自動接聽電話?
- 6. Twilio接聽電話
- 7. 對未接聽電話撥打電話 - Twilio
- 8. 如何區分未接電話和拒絕接聽電話?
- 9. 編程接聽電話
- 10. 想聽聽來電和撥出呼叫
- 11. 當用戶撥打電話時收聽已結束的電話
- 12. 撥打多個號碼,在未接聽的電話上掛斷並連接已接電話(twilio)
- 13. Plivo API - 接聽電話
- 14. 在android 2.1中自動接聽電話
- 15. 在Android上檢測到撥出電話
- 16. 撥打和接聽來自Android手機的電話連接到Raspberry pi
- 17. 無法使用IMSDroid撥打和接聽SIP電話
- 18. 在iPhone上檢測藍牙接聽/掛斷電話按鈕
- 19. 如何以編程方式在撥打/接聽電話時打開揚聲器?
- 20. 如何接聽電話並掛斷電話?
- 21. 以編程方式接聽電話
- 22. 在Android 2.2+中打出電話接聽狀態
- 23. 使用廣播接收機來檢測撥出電話
- 24. 如何以編程方式在android中接聽電話?
- 25. 如何在android中接聽電話之前運行程序?
- 26. Android如何用耳機按鈕接聽電話等?
- 27. 如何在android中自動接聽電話?
- 28. 如何以編程方式在Android 4.0.3中接聽電話?
- 29. 檢測一個人在Android中接聽電話需要多長時間
- 30. Android自定義撥號器上的竊聽電話號碼鏈接
如果您找到答案,請發表解答。 – 2015-10-09 07:38:37