關於對來電狀態和去電狀態的區分

2021-06-17 00:23:14 字數 1359 閱讀 9548

首先網上查到的那些說「沒有專門用於接收來電的action,所以,非去電即來電」,這是不對的!

同時在onreceive()方法中進行**狀態***的註冊也是有問題的,因為每個intent的到來,都會呼叫

onreceieve();
方法,造成重複註冊***,從而出現
oncallstatechanged(int state, string incomingnumber);
多次被呼叫的現象,所以應該加標誌變數將其限制為只註冊一次。

經過測試,系統在撥號的時候會發出兩個intent:

第乙個intent的action是撥號動作

"android.intent.action.new_outgoing_call"

第二個intent的action是**狀態改變動作

"android.intent.action.phone_state"

而系統在收到來電的時候,只會發出後者**狀態變動的intent。

撥號和來電不同的地方在於,撥號是發出的狀態變動intent的狀態中是沒有鈴響狀態 (

telephonymanager.call_state_ringing

)的,而是在撥號後,(不管對方是否接通均一樣)是摘機狀態(

telephonymanager.call_state_offhook)。

還有一處不同的地方是,撥號的號碼可以在intent中獲取:

string dialnumber = intent.getstringextra(intent.extra_phone_number);

而來電號碼,可從狀態改變事件(不包括接通狀態)中查到:

@override

public void oncallstatechanged(int state, string incomingnumber)

根據以上分析,可以總結出判斷**是來電還是去電的乙個方法: 根據

oncallstatechanged(int state, string incomingnumber)
方法中的incomingnumber

是否存在

或者是否有響鈴狀態(

telephonymanager.call_state_ringing

)出現過來判斷。但是又因為來電和去電的接通狀態均無incomingnumber,那麼,需要的話,也可以通過在響鈴狀態時設定乙個標誌變數來加以區分。

手機來電去電狀態分析

一 來電 call state idle call state ringing 號碼 接聽 結束通話 call state ringing null call state offhook call state offhook call state idle 不接聽直接結束通話 call state ...

關於對程序 執行緒的返回狀態的獲取的理解

而主線程需要用一段空間來儲存這個子執行緒退出時候的狀態,因此需要在主線程中提前定義乙個變數 通過pthread join函式,來接受到執行緒的退出狀態。例如建立乙個retval,使用這個變數來接受這個資訊即可。但是這個變數的型別怎麼確定呢?pthread join函式的定義者將這個函式的引數設定成了...

關於學習方法和最近狀態的總結

暑假已經過去一半了,這個暑假感覺一天忙忙碌碌的,卻感覺沒有什麼太大的收穫。總結了一下原因,發現是平時自己沒有總結的好習慣,導致剛學到的東西不加以總結就隨著時間的流逝便忘記了。在學習過程當中一直存在著不擅長安排時間的缺點,每天雖然將每個小時都規劃了,卻執行力不足,抑或著是時間安排太密集沒有彈性,導致今...