跳转到主内容
极星编程网:以代码为星,赴技术山海!

Android来电拦截的实现方法

本文实例为大家分享了Android来电拦截的方法,供大家参考,具体内容如下权限

拨号广播—PhoneStateReceiverpackage 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);}}}

来电挂断

BlockCallHelperpackage 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);}}

看主界面MainActivitypackage 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.aidlpackage 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;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:Android 自定义来电秀实现总结Android仿通话来电界面效果Android8.1 通过黑名单屏蔽系统短信和来电功能Android如何帮助用户自动接听或者挂断来电Android监听系统来电并弹出提示窗口Android来电监听和去电监听实现代码Android之来电秀实战示例

相关文章