我目前在Android中有一個Service,它是一個示例VOIP客戶端,因此它偵聽出SIP消息,如果它接收到它,它將啓動一個帶UI組件的Activity屏幕。從服務更新UI更有效的方式比意圖?
然後下列SIP消息確定活動在屏幕上顯示的內容。 例如,如果它的來電將顯示應答或拒絕或撥出電話,它將顯示一個撥號屏幕。
當時我使用Intents讓活動知道它應該顯示什麼狀態。
一個例子是如下:
Intent i = new Intent();
i.setAction(SIPEngine.SIP_TRYING_INTENT);
i.putExtra("com.net.INCOMING", true);
sendBroadcast(i);
Intent x = new Intent();
x.setAction(CallManager.SIP_INCOMING_CALL_INTENT);
sendBroadcast(x);
Log.d("INTENT SENT", "INTENT SENT INCOMING CALL AFTER PROCESSINVITE");
所以活動將對這些意圖註冊的廣播reciever,並且將根據它接收的最後意圖切換其狀態。
示例代碼如下:
SipCallListener = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(SIPEngine.SIP_RINGING_INTENT.equals(action)){
Log.d("cda ", "Got RINGING action SIPENGINE");
ringingSetup();
}
if(CallManager.SIP_INCOMING_CALL_INTENT.equals(action)){
Log.d("cda ", "Got PHONE RINGING action");
incomingCallSetup();
}
}
};
IntentFilter filter = new IntentFilter(CallManager.SIP_INCOMING_CALL_INTENT);
filter.addAction(CallManager.SIP_RINGING_CALL_INTENT);
registerReceiver(SipCallListener, filter);
然而,這作品好像不是很有效的,該意圖將獲得廣播系統,寬到必須解僱了不同的狀態似乎意圖喜歡它可能會變得低效,我必須包括更多,以及增加複雜性。
所以我想知道是否有一個不同的更有效和更乾淨的方式來做到這一點?
有沒有辦法讓Intent只在應用程序內部播放?
回調會是一個更好的主意嗎?如果有的話,爲什麼以及如何實施?
我已閱讀您的文章幾次豐富,我不知道你的意思。你能否提供一個關於如何完成它的例子的鏈接? – 2010-04-13 13:25:08
我在上面提供了進一步的解釋...讓我知道你是否有更多?或者如果它不明確。 – Rich 2010-04-13 13:59:04
感謝您豐富,優秀的職位! – 2010-04-14 10:03:07