2013-02-09 73 views
0

我想找到任何方式給我的去電回答,但我無法得到任何解決方案。我使用了BroadcastReceiver,TelephonyManager和PhoneStateLinstener,但我無法獲得RINGING狀態的傳出呼叫。我也嘗試讀取通話記錄以搜索當前通話的持續時間,但通話記錄中的通話在完成後保存。如何檢測來電回答

我讀過使用公共API無法實現。這聽起來像是可能以不同的方式,如使用內部API。我認爲會有一些方法可以做到這一點,因爲我可以在市場上看到這些類型的應用程序。

請給我任何線索並分享你的知識。

謝謝。

回答

0

嘗試下面的內容。我做了那麼久。

1)註冊一個OutGoingCallReceiver(SO上搜索意圖的行動)

2)註冊一個PhoneStateChangeReceiver(意向行動: - ACTION_PHONE_STATE_CHANGED

3)創建一個標誌,在SharedPrefernces或全球variable

4)請在OutgoingCallReceiver這個標誌真的,現在當通話將被採摘ü會在PhoneStateChangeReceiver獲得狀態CALL_STATE_OFFHOOK, ,這樣你們可以計算出,如果這是來電鉤或呼出大呼過癮。在適當的地方禁用標誌。

您還可以節省掛機時間。

+0

感謝您的回覆,它總比沒有好。但是......你的回答不是我想要的。我想要得到我的電話被回答的信號/事件。 – sunghun 2013-02-10 05:16:34

+0

所以如果狀態是OFF_HOOK意味着呼叫被應答。 – AAnkit 2013-02-10 09:23:19

0

我知道這個問題的答案很晚。但我今天遇到它,並有一個想法,所以分享它。它可能會幫助未來訪問該帖子的其他人。

我想你可以在PhoneStateListener類的onCallStateChanged方法中檢查上次調用的傳出呼叫時間。如果狀態爲空閒,即TelephonyManager.CALL_STATE_IDLE,則獲取數據。

事情是這樣的:

Cursor mCallCursor = context.getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI,null,null,null,null); 
int duration = mCallCursor.getColumnIndex(CallLog.Calls.DURATION); 
while(mCallCursor.moveToFirst()) 
{ 
    Toast.makeText(context, mCallCursor.getString(duration), Toast.LENGTH_LONG).show(); 
} 

你可以找到更多有關here。我沒有測試過上面的代碼。但是這樣的事情應該起作用。

您可以檢查時間00:00,電話沒有回答。否則電話被回答。

希望這可以幫助你。