В настоящее время у меня есть Служба на Android, которая является образцом VOIP-клиента, поэтому она прослушивает сообщения SIP и, если она ее получает, запускает экран Activity с компонентами пользовательского интерфейса.
Затем следующие сообщения SIP определяют, что должно отображаться на экране. Например, если в его входящем вызове появится ответ "Ответ" или "Отклонить" или исходящий вызов, он отобразит экран набора номера.
В тот момент, когда я использую Intents, чтобы сообщить Activity, какое состояние оно должно отображать.
Пример следующий:
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");
Таким образом, у этого мероприятия будет зарегистрирован радиоприемник, зарегистрированный для этих целей, и переключит его состояние в соответствии с последним намерением, которое он получил.
Пример кода следующим образом:
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);
Это работает, однако кажется, что он не очень эффективен, Intents получат широковещательную систему, и намерения, которые должны срабатывать для разных состояний, похоже, что это может стать неэффективным, тем больше я должен включать, а также добавить сложность.
Итак, мне было интересно, есть ли другой более эффективный и чистый способ сделать это?
Есть ли способ поддерживать Intents вещание только внутри приложения?
Будет ли обратная связь лучшей идеей? Если да, то почему и каким образом они должны быть реализованы?