문제

나는있다 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 개의 키 값 쌍이 포함되어 있습니다.

  1. android.phone.extra.already_called = null
  2. Android.intent.extra.phone_number = 98xxxxxx98
  3. Android.phone.extra.original_uri = 전화 :98xxxxxx98

98xxxxxx98 사용자가 전화 한 번호입니다.

onreceive ()가 다시 호출되면이 숫자는 98xxxxxx98* 또는 0*다이얼 번호의 끝에서 별표 (*)를 확인하면 onreceive () 메소드가 처음 또는 다음 시간 동안 호출되면 추론 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top