Click here to Skip to main content
15,892,839 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
Java
import java.lang.reflect.Method;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;

import com.android.internal.telephony.ITelephony;

public class PhoneCallStateListener extends PhoneStateListener {	
	
	private Context context;
	public PhoneCallStateListener(Context context){
		this.context = context;
	}

	
	@Override
	public void onCallStateChanged(int state, String incomingNumber) {	
	SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(context);
	  
	switch (state) {
		
		case TelephonyManager.CALL_STATE_RINGING:		
			
		  String block_number = prefs.getString("block_number", null);
				AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);	
				//Turn ON the mute
		audioManager.setStreamMute(AudioManager.STREAM_RING, true);					
				TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
		try {
		Toast.makeText(context, "in"+block_number, Toast.LENGTH_LONG).show();
		Class clazz = Class.forName(telephonyManager.getClass().getName());
		Method method = clazz.getDeclaredMethod("getITelephony");
		method.setAccessible(true);
		ITelephony telephonyService = (ITelephony) method.invoke(telephonyManager);		
		//Checking incoming call number
		System.out.println("Call "+block_number);
		if (incomingNumber.equalsIgnoreCase("+91"+block_number)) {
		//telephonyService.silenceRinger();//Security exception problem
		 telephonyService = (ITelephony) method.invoke(telephonyManager);
		 telephonyService.silenceRinger();
		System.out.println(" in  "+block_number);
		telephonyService.endCall();
		}
		} catch (Exception e) {
		Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
		}
			//Turn OFF the mute		
		audioManager.setStreamMute(AudioManager.STREAM_RING, false);
		break;
		case PhoneStateListener.LISTEN_CALL_STATE:
		}
		super.onCallStateChanged(state, incomingNumber);
	}
}

Though this code i am able to block incoming calls but problems it rings for fraction of seconds before disconnection of time how can i directly disconnect phone without single ringing
Posted
Comments
cute_friend7077 8-Mar-13 0:07am    
code is working on emulator but not on real device having os ICS 4.0.4

public class myActivity extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{

String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
setResultData(null); //It will terminate the call
Toast.makeText(context, "Call Terminated" + number, 5000).show();

}
}

Hope it helps
Regards:
Sahil Mahajan(eMM jAY)
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900