logo资料库

Android来电拦截的实现方法.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
Android来电拦截的实现方法 来电拦截的实现方法 主要为大家详细介绍了Android来电拦截的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Android来电拦截的方法,供大家参考,具体内容如下 权限权限 拨号广播—PhoneStateReceiver 拨号广播 package com.example.administrator.endcall; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; public class PhoneStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); Log.i("BlockCallHelper", "BlockCallHelper------->>>>" + phoneNumber); } } } 来电挂断 来电挂断 BlockCallHelper package com.example.administrator.endcall; import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; import android.net.Uri; import android.os.RemoteException; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; import com.android.internal.telephony.ITelephony; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; public final class BlockCallHelper { private static final String TAG = "BlockCallHelper"; private Context mContext; private TelephonyManager tManger; private List phones; private BlockCallBack bcb; ////////////////////////////////////////// private static final class Factory { private static final BlockCallHelper instance = new BlockCallHelper(); }
public static BlockCallHelper getInstance() { return Factory.instance; } /** * 初始化上下文以及数据 * @param context */ public BlockCallHelper init(Context context) { if (context == null) { throw new NullPointerException("context == null!"); } this.mContext = context; this.tManger = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); tManger.listen(new PhoneCallListener(), PhoneCallListener.LISTEN_CALL_STATE); return this; } /** * 注入需要拦截的手机号 * @param phoneL */ public BlockCallHelper injectBlockPhoneNum(ArrayList blockCalls) { this.phones = blockCalls; return this; } /** * 结束通话 */ private void endCall() { Class tmc = TelephonyManager.class; Method getITelephonyMethod; try { getITelephonyMethod = tmc.getDeclaredMethod("getITelephony", (Class[]) null); getITelephonyMethod.setAccessible(true); ITelephony iTelephony = (ITelephony) getITelephonyMethod.invoke(tManger, (Object[]) null); iTelephony.endCall(); } catch (NoSuchMethodException e1) { e1.printStackTrace(); } catch (InvocationTargetException e2) { e2.printStackTrace(); } catch (IllegalAccessException e3) { e3.printStackTrace(); } catch (RemoteException e4) { e4.printStackTrace(); } } private final class PhoneCallListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { if (state == TelephonyManager.CALL_STATE_RINGING) { if (phones.contains(incomingNumber)) { Log.i("BlockCallHelper", "contains contains contains"); endCall(); if (bcb != null) { bcb.callBack(incomingNumber); } } else { Log.i("BlockCallHelper", "contains not-------"); } } } } public BlockCallHelper setBlockCallBack(BlockCallBack back) { this.bcb = back; return this; } public interface BlockCallBack { void callBack(String incomingNum); } } 看主界面MainActivity package com.example.administrator.endcall;
import android.app.Activity; import android.app.NotificationManager; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList blockCalls = new ArrayList(); blockCalls.add("13581922339"); blockCalls.add("+8613581922339"); blockCalls.add("18500813370"); blockCalls.add("13717717622"); blockCalls.add("+8613717717622"); BlockCallHelper.getInstance().init(this).injectBlockPhoneNum(blockCalls).setBlockCallBack(new BlockCallHelper.BlockCallBack() { @Override public void callBack(String incomingNum) { Log.i("BlockCallHelper", "incomingNum-----------" + incomingNum); } }); } } 最后看AIdl层面 ITelephony.aidl package com.android.internal.telephony; interface ITelephony { void dial(String number); void call(String number); boolean showCallScreen(); boolean showCallScreenWithDialpad(boolean showDialpad); boolean endCall(); void answerRingingCall(); void silenceRinger(); boolean isOffhook(); boolean isRinging(); boolean isIdle(); boolean isRadioOn(); boolean isSimPinEnabled(); void cancelMissedCallsNotification(); boolean supplyPin(String pin); boolean handlePinMmi(String dialString); void toggleRadioOnOff(); boolean setRadio(boolean turnOn); void updateServiceLocation(); void enableLocationUpdates(); void disableLocationUpdates(); int enableApnType(String type); int disableApnType(String type); boolean enableDataConnectivity(); boolean disableDataConnectivity(); boolean isDataConnectivityPossible(); Bundle getCellLocation(); List getNeighboringCellInfo(); int getCallState(); int getDataActivity(); int getDataState(); } NeighboringCellInfo.aidl // NeighboringCellInfo.aidl package android.telephony; parcelable NeighboringCellInfo;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
分享到:
收藏