Search code examples
androidandroid-broadcastreceiver

Broadcast Receiver to Read the Incoming Caller's name


I am trying to make the app read out the name of the incoming caller. I think there is a problem with the way i registered the BroadcastReceiver but there are no errors shown.

        private void initializeCallReceiver(){
    callReceiver = new BroadcastReceiver(){
@Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)){
                String caller = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
                speaker.speak("Call from " + caller);
            }
        }
    };

}

 private void registerCallReceiver() {
    IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.EXTRA_STATE_RINGING");
    registerReceiver(callReceiver,intentFilter);
}

Oncreate method

 toggle = (ToggleButton)findViewById(R.id.speechToggle);
    smsText = (TextView)findViewById(R.id.sms_text);
    smsSender = (TextView)findViewById(R.id.sms_sender);



    toggleListener = new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton view, boolean isChecked) {
            if(isChecked){
                speaker.allow(true);
                speaker.speak(getString(R.string.start_speaking));
            }else{
                speaker.speak(getString(R.string.stop_speaking));
                speaker.allow(false);
            }
        }
    };
    toggle.setOnCheckedChangeListener(toggleListener);

    checkTTS();
    initializeCallReceiver();
    registerCallReceiver();

}

Solution

  • This is the solution i got. It works now.
    private void registerCallReceiver() { IntentFilter intentFilter = new IntentFilter("android.intent.action.PHONE_STATE"); registerReceiver(callReceiver,intentFilter);