- 0
BroadcastReceiver.OnReceive срабазывает 2 раза
-
Похожий контент
-
- 0 ответов
- 1 733 просмотра
-
Как получить результат отправки СМС, корректно получить Activity.RESULT через broadcast
От ENERGY,
- sms
- pendingintent
- (и ещё 1 )
- 2 ответа
- 2 117 просмотров
-
Использование нативных LocalBroadcastManager и BroadcastReceiver 1 2
От Pax Beach,
- broadcastreceiver
- timer
- (и ещё 2 )
- 30 ответов
- 7 385 просмотров
-
- 3 ответа
- 2 943 просмотра
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
x11
Так и должно быть, что событие "BroadcastReceiver.OnReceive" срабатывает 2 раза подряд?
Код создания. Проверял: создается только один BroadcastReceiver.
procedure TDMSrv.CreateBroadcastReceiver; begin BroadcastReceiver := TCSBroadcastReceiver.Create(nil); BroadcastReceiver.OnReceive := BroadcastReceiverOnReceive; BroadcastReceiver.RegisterReceive; BroadcastReceiver.Items.Clear; BroadcastReceiver.Add(PHONE_STATE); BroadcastReceiver.Add(NEW_OUTGOING_CALL); Log('CreateBroadcastReceiver'); end;
Сам код события:
procedure TDMSrv.BroadcastReceiverOnReceive(csContext: JContext; csIntent: JIntent); begin log('BroadcastReceiverOnReceive'); CheckPhoneCallState(csContext, csIntent); end;
Ну и сама процедура обработки:
procedure TDMSrv.CheckPhoneCallState(Context: JContext; Intent: JIntent); var telephonyService: JObject; telephonyManager: JTelephonyManager; state: JString; incomingCallNumber: string; outgoingCallNumber: string; outputResult: string; begin Log('CheckPhoneCallState: ' + JStringToString(Intent.getAction)); outputResult:= sLineBreak; telephonyService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE); telephonyManager := TJTelephonyManager.Wrap((telephonyService as ILocalObject).GetObjectID); if JStringToString(Intent.getAction).Equals(PHONE_STATE) then begin state := Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_STATE); if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_IDLE) then outputResult:= outputResult + 'Phone is IDLE ' + sLineBreak else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_RINGING) then begin incomingCallNumber := JStringToString(Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_INCOMING_NUMBER)); if incomingCallNumber.Equals('') then incomingCallNumber:= 'PRIVATE NUMBER'; outputResult := outputResult + 'Phone is RINGING' + sLineBreak; outputResult := outputResult + 'Incoming call from ' + incomingCallNumber + sLineBreak; LaunchNotification(incomingCallNumber, 'Входящий вызов'); InsertTel(incomingCallNumber, True); end else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_OFFHOOK) then outputResult:= outputResult + 'Phone is OFFHOOK' + sLineBreak; end else if JStringToString(Intent.getAction).Equals(NEW_OUTGOING_CALL) then begin outgoingCallNumber:= JStringToString(Intent.getStringExtra(TJIntent.JavaClass.EXTRA_PHONE_NUMBER)); outputResult:= outputResult + 'Outgoing call to ' + outgoingCallNumber + sLineBreak; LaunchNotification(outgoingCallNumber, 'Исходящий вызов'); InsertTel(outgoingCallNumber, False); end; Log(outputResult); end;
Ссылка на комментарий
11 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.