本文实例为大家分享了Android来电拦截的方法,供大家参考,具体内容如下
权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> <!-- 注册广播 监听拨出电话 --> <receiver android:name="com.example.administrator.endcall.PhoneStateReceiver"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver>
拨号广播—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<String> 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<String> blockCalls) { this.phones = blockCalls; return this; } /** * 结束通话 */ private void endCall() { Class<TelephonyManager> 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<String> 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<NeighboringCellInfo> getNeighboringCellInfo(); int getCallState(); int getDataActivity(); int getDataState(); }
NeighboringCellInfo.aidl
// NeighboringCellInfo.aidl package android.telephony; parcelable NeighboringCellInfo;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
我想为我的Android手机写一个软件,拦截来电,并播放一个简短的音频剪辑,指示来电者按“1”继续通话。这是打电话推销员的。 备注: > 很难得到一个明确的答案,因为在2012年,Android2.3(姜饼)删除了一些与修改手机状态相关的重要API,见这里。然而,Android7(“牛轧糖”)似乎支持呼叫阻塞(见这里),所以我希望当前的API支持拦截呼叫。 我不想像这里建议的那样将呼叫转发到某个服
null 任何帮助都是欢迎的,谢谢。
本文向大家介绍Android 实现电话拦截及拦截提示音功能的开发,包括了Android 实现电话拦截及拦截提示音功能的开发的使用技巧和注意事项,需要的朋友参考一下 本文所讲的内容是在Android系统中如何写程序进行电话拦截,并发出拦截提示音提醒用户,可以说此功能还是比较实用的。 1、电话拦截 这个功能大家可能都知道了,就是利用反射原理调用ITelephony的隐藏
本文向大家介绍SpringBoot拦截器实现登录拦截的方法示例,包括了SpringBoot拦截器实现登录拦截的方法示例的使用技巧和注意事项,需要的朋友参考一下 源码 GitHub:https://github.com/291685399/springboot-learning/tree/master/springboot-interceptor01 SpringBoot拦截器可以做什么 可以对UR
这篇文章:
本文向大家介绍Android监听来电和去电的实现方法,包括了Android监听来电和去电的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android监听来电和去电的实现方法。分享给大家供大家参考,具体如下: 要监听android打电话和接电话,只需下面2步骤 第一步,写一个Receiver继承自BroadcastReceiver 第二步:在AndroidManifest.xml