处理呼叫的程序接收该广播的优先级较低,因此,自己定义广播接收者。
在接收到呼出电话的广播后,改动setResult()传递的电话号码。就可以实现对呼出电话的管理。
对呼出的电话进行操作的实例:
Activity不用改动。默认状态就可以。
这里仅仅给出广播:
package com.example.chargecall;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class OutReceiver extends BroadcastReceiver{
	@Override
	public void onReceive(Context context, Intent intent) {
		// 改动呼出的电话号码:
		/*能够对电话号码进行多种操作。假设想要禁止呼出的电话号码,能够直接设置为空值
		 * 
		 * */
		String number = getResultData();
		number = "12345" + number;
		setResultData(number);
		
	}
}
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
 <receiver android:name="com.example.chargecall.OutReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            </intent-filter>
        </receiver>
方法就可以获得ITelephony接口的对象。
对呼入的电话进行操作的实例:
相同的。主界面使用默认的就可以,
给出广播:
package com.example.interceptcall;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.android.internal.telephony.ITelephony;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.RemoteException;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
public class PhoneStateReceiver extends BroadcastReceiver {
	TelephonyManager manager;
	@Override
	public void onReceive(Context context, Intent intent) {
		manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
		PhoneStateListener listener = new InnerPhoneStateListener();
		int events = PhoneStateListener.LISTEN_CALL_STATE;
		manager.listen(listener, events);
	}
 
	private ITelephony getITelephony(){
		ITelephony iTelephony = null;
		Method method = null;
		try {
			method = TelephonyManager.class.getDeclaredMethod("getITelephony", (Class[])null);
		    method.setAccessible(true);
		    iTelephony =  (ITelephony) method.invoke(manager, null);
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		return iTelephony;
	}
	private class InnerPhoneStateListener extends PhoneStateListener{
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			// TODO Auto-generated method stub
			switch (state) {
			case TelephonyManager.CALL_STATE_IDLE://空暇状态
				
				break;
			case TelephonyManager.CALL_STATE_OFFHOOK://通话状态
				
				break;
			case TelephonyManager.CALL_STATE_RINGING://响铃状态
				   if("15539187816".equals(incomingNumber)){//挂断电话
					   try {
						getITelephony().endCall();
					} catch (RemoteException e) {
						e.printStackTrace();
					}
				   }
				break;
			}
			super.onCallStateChanged(state, incomingNumber);
		}
		
	}
}
因为不能识别ITelephony,还须要自己定义aidl接口,这样才干够,
ITelephony:
package com.android.internal.telephony;
interface ITelephony {
      boolean endCall();
}
相同,要把权限加到AndroidMainfest.xml中,还要把写好的广播加入到这里边。
原文:http://www.cnblogs.com/claireyuancy/p/7043929.html