标签:man 异常 break 系统 cat ssi 实例 targe 有序
处理呼叫的程序接收该广播的优先级较低,因此,自己定义广播接收者。
在接收到呼出电话的广播后,改动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中,还要把写好的广播加入到这里边。
标签:man 异常 break 系统 cat ssi 实例 targe 有序
原文地址:http://www.cnblogs.com/claireyuancy/p/7043929.html