鴻蒙OS 發(fā)起一路呼叫

2020-09-18 15:44 更新

場景介紹

當應(yīng)用需要發(fā)起一路呼叫給一個指定的號碼時,使用本業(yè)務(wù)。呼叫可以是音頻呼叫,也可以是視頻呼叫。

如果設(shè)備支持同時插入兩張 SIM 卡,且撥打電話時兩張SIM 卡均在位,呼叫時會彈出彈框讓用戶選擇從卡 1 還是卡 2 呼出。

接口說明

DistributedCallManager 為開發(fā)者提供呼叫管理功能,具體功能分類如下表。

功能分類 接口名 描述 所需權(quán)限
能力獲取 hasVoiceCapability() 檢查當前設(shè)備是否支持語音呼叫。
獲取管理對象 getInstance(Context context) 獲取呼叫管理對象。
發(fā)起呼叫 dial(String number, boolean isVideoCall) 發(fā)起音頻或視頻呼叫。 ohos.permission.PLACE_CALL
觀察通話業(yè)務(wù)狀態(tài)變化 addObserver(CallStateObserver observer, int mask) 觀察通話業(yè)務(wù)狀態(tài)變化。 ohos.permission.READ_CALL_LOG(獲取通話號碼需要該權(quán)限)

開發(fā)步驟

  1. 調(diào)用 DistributedCallManager 的 getInstance 接口,創(chuàng)建/獲取呼叫管理對象。

  1. 調(diào)用 hasVoiceCapability() 接口獲取當前設(shè)備呼叫能力,如果支持繼續(xù)下一步;如果不支持則無法發(fā)起呼叫。

  1. 發(fā)起一路呼叫。

  1. 注冊觀察呼叫狀態(tài)變化。

  1. // 創(chuàng)建呼叫管理對象
  2. DistributedCallManager dcManager = DistributedCallManager.getInstance(context);
  3. // 調(diào)用查詢能力接口
  4. if (!dcManager.hasVoiceCapability()) {
  5. return;
  6. }
  7. // 如果設(shè)備支持呼叫能力,則繼續(xù)發(fā)起呼叫
  8. dcManager.dial(destinationNum, isVideoCall);
  9. // 創(chuàng)建繼承CallStateObserver的類MyCallStateObserver
  10. class MyCallStateObserver extends CallStateObserver {
  11. // 構(gòu)造方法,在當前線程的runner中執(zhí)行回調(diào),slotId需要傳入要觀察的卡槽ID(0或1)
  12. MyCallStateObserver(int slotId) {
  13. super(slotId);
  14. }
  15. // 構(gòu)造方法,在執(zhí)行runner中執(zhí)行回調(diào),slotId需要傳入要觀察的卡槽ID(0或1)
  16. MyCallStateObserver(int slotId, EventRunner runner) {
  17. super(slotId, runner);
  18. }
  19. // 通話狀態(tài)變化的回調(diào)方法
  20. @Override
  21. public void onCallStateUpdated(int state, String number) {
  22. ...
  23. }
  24. }
  25. // 執(zhí)行回調(diào)的runner
  26. EventRunner runner = EventRunner.create();
  27. // 創(chuàng)建MyCallStateObserver的對象
  28. MyCallStateObserver observer = new MyCallStateObserver(slotId, runner);
  29. // 觀察OBSERVE_CALL_STATE的變化
  30. dcManager.addObserver(observer, CallStateObserver.OBSERVE_CALL_STATE);
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號