2013-10-30 96 views
2

我想在開始電話後檢查通話狀態是通過連接的PC進行的,如果可能的話使用ADB。 我通過輸入帶有adb命令service call phone 2 s16 "some phone number"的電話號碼開始來電,然後發送input keyevent 5按下通話按鈕。遠程檢查電話的狀態

現在我正在努力尋找一種方法來確定通話的狀態。我需要知道被叫號碼目前是否忙碌,如果通話被取消或通話是否成功/我與被叫號碼有開放的語音連接。 有什麼方法可以監測嗎?

手機型號真的沒有關係,也沒有我使用的android服務/應用程序調用數字,也沒有android版本。電話將被植根。我會使用任何作品。

回答

1

找出呼叫是否仍在進行中非常簡單。您可以:

搞清楚註冊如果所調用的號碼目前處於忙碌狀態,則是完全不同的範圍,因爲您現在必須處理網絡特定的實施(cdma與gsm大不相同)。在CDMA上,幾乎不可能弄清楚。

+2

感謝這個答案,那是相當有用的。儘管我發現使用adb shell命令'dumpsys telephony.registry'更簡單一些,它提供了非常詳細的信息 – PTS

0

我剛剛找到自己的答案。使用「dumpsys telephony.registry」爲我提供我需要的所有信息。它包含變量「mCallState」,正是我所需要的。

更新:好的不是100%我需要的,由於某種原因,建立連接時callstate不會改變。如果有人有更多想法我很想知道。

更新2:顯然這是Android中的一項安全測量,在通話過程中無法獲取當前通話狀態,您只會知道用戶正在通話,但如果已經存在活動連接,仍然撥號。

+0

您是否知道該設置在哪裏?以某種方式獲得該狀態將非常有用... – not2qubit

+0

這是一個可以通過ADB執行的shell命令。 – PTS

1

要調用TelephonyManager.getCallState()adb shell使用:

service call phone 30 
+0

你怎麼知道爲相應的api函數提供什麼int? 雖然提供'30'總是給我'00000000 00000001',不管電話是空閒還是撥號。 – PTS

+0

你的手機有哪些Android版本? jb-mr2的'getCallState' = 30。對於mr2之前的ics和jb,它是29. –

+0

運行JB 4.2,得到與兩個代碼相同的結果:/ – PTS

0

的方式找到這些數字時,首先確定你的AOS版本,然後去GrepCode,去你的版本。然後按照鏈接:/com.android.internal.telephony.ITelephony(* .java)並搜索代碼CALL_TRANSACTION

+0

問題是我需要通過ADB /腳本接口來完成此操作。編寫應用程序是沒有問題的。 – PTS

6

adb shell dumpsys telephony.registry | grep mCallState,將返回:

  • 0表示空閒,
  • 1 =振鈴和
  • 2 =主動呼叫
0

運行adb logcat|grep -i currentCallState

您將獲得日誌:

D/PhoneUtils(1242): setAudioMode() currentCallState : DIALING

D/PhoneUtils(1242): setAudioMode() currentCallState : DIALING

D/PhoneUtils(1242): setAudioMode() currentCallState : DIALING

D/PhoneUtils(1242): setAudioMode() currentCallState : DIALING

D/PhoneUtils(1242): setAudioMode() currentCallState : ALERTING

D/PhoneUtils(1242): setAudioMode() currentCallState : ACTIVE

D/PhoneUtils(1242): setAudioMode() currentCallState : DISCONNECTING

D/PhoneUtils(1242): setAudioMode() currentCallState : IDLE

撥號 - 正在撥號 ALERTING - 振鈴 斷開連接 - 被點擊斷開 IDLE - 返回到正常狀態

+0

不工作,我在終端運行命令 –