Android -Looping에서 New_outgeing_call 이벤트 중지?
문제
나는있다 BroadcastReceiver
매력 있는 것 ACTION_NEW_OUTGOING_CALL
이벤트.
에서 onReceive()
방법은 제공된 번호를 새로 보내고 있습니다 ListActivity
, 사용자가 목록에서 다양한 새로운 대상 번호를 선택하는 곳.
사용자가 목록에서 새 번호를 선택하면 새로운 것을 시작합니다. ACTION_CALL
URI 필드의 새로운 번호와 의도. 또는 결과는 원래 숫자 일 수 있습니다.
새 번호가 무엇이든간에 즉시 전화를 걸고 더 이상 처리되지 않아야합니다.
어떻게 할 수 있습니까? BroadcastReceiver
이 결과 숫자를 다시 처리해서는 안된다는 것을 알고 있습니까?
해결책
나는 내에서 "바이 패스 접두사"를 구현함으로써 이것을 해결했다. BroadcastReceiver
. 내 클라이언트 앱이 숫자를 직접 호출하려면 ACTION_CALL
의지.
다이얼 번호에 (하드 코딩) 접두사가있는 경우 BroadcastReceiver
접두사를 벗기고 전화가 정상적으로 진행할 수 있습니다.
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {
String number = getResultData();
if (number.startsWith(BYPASS_PREFIX)) {
setResultData(number.substring(BYPASS_PREFIX.length()));
} else {
// do additional processing
}
}
}
이렇게하면 한 번에 두 가지 문제가 해결됩니다. 이렇게하면 통화 루핑을 중지 할뿐만 아니라 전화 번호부 항목에 접두사를 저장하여 특정 번호에 대한 추가 처리를 우회 할 수 있습니다.
다른 팁
방송 수신기의 onreceive () 메소드는 인수로서의 의도를 수신합니다. 의도를 사용하여 의도에서 번들을 추출하십시오 .getextras (). 이 번들에는 다음과 같이 3 개의 키 값 쌍이 포함되어 있습니다.
- android.phone.extra.already_called = null
- Android.intent.extra.phone_number = 98xxxxxx98
- Android.phone.extra.original_uri = 전화 :98xxxxxx98
98xxxxxx98 사용자가 전화 한 번호입니다.
onreceive ()가 다시 호출되면이 숫자는 98xxxxxx98* 또는 0*다이얼 번호의 끝에서 별표 (*)를 확인하면 onreceive () 메소드가 처음 또는 다음 시간 동안 호출되면 추론 될 수 있습니다.