Android来电拦截的实现方法

本文实例为大家分享了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;

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

时间: 2024-09-25 21:09:55

Android来电拦截的实现方法的相关文章

Android来电拦截的实现方法_Android

本文实例为大家分享了Android来电拦截的方法,供大家参考,具体内容如下 权限 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android

android 广播-Android来电来信以及挂断接通的广播事件

问题描述 Android来电来信以及挂断接通的广播事件 鄙人想开发一个来电来信闪光的软件.网上这两个广播事件讲的不清不楚的.请大神告诉我,还有相应的权限 解决方案 Android中电话通信的简单流程 使用代码拨打电话 1>创建隐式意图 Intent intent=new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:13555555555")); 2>启动Activ

Android短信发送器实现方法_Android

本文实例讲述了Android短信发送器实现方法.分享给大家供大家参考.具体如下: 这里模拟android短信发送器的实现 AndroidManifest.xml清单文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ljq.

Android实现扩展Menu的方法_Android

本文实例讲述了Android实现扩展Menu的方法.分享给大家供大家参考.具体如下: 1. java代码: package com.tabmenu; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.view.Gravity; import android.view.View; import an

“来电拦截”不能侵犯隐私

社会普遍期待<网络安全法>能为网民的信息安全撑起法律保护伞.这同样需要执法者能严格执行法律.监管部门的执法力度.追责力度,其实就是网民隐私权的保护力度. 大多数人都有过被骚扰电话折腾得不胜其烦的经历,大家往往会选择给手机安装一款来电拦截软件,屏蔽陌生号码和骚扰电话,于是整个世界清静了.但近日三款常见的手机"来电拦截"应用却被曝收集用户通讯录,整合成公开资料库.预计全球有30亿个手机号码的用户身份泄露. 前门把骚扰电话这只"狼"拒之手机之外,没想到后门又进

Android 滑动拦截实例代码解析_Android

废话不多说了,直接给大家贴代码了,具体代码如下所示: package demo.hq.com.fby; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.widget.LinearLayout; /** * Created by huqing on 2016/12/7.

Android实现扩展Menu的方法

本文实例讲述了Android实现扩展Menu的方法.分享给大家供大家参考.具体如下: 1. java代码: package com.tabmenu; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.view.Gravity; import android.view.View; import an

Android 滑动拦截实例代码解析

废话不多说了,直接给大家贴代码了,具体代码如下所示: package demo.hq.com.fby; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.widget.LinearLayout; /** * Created by huqing on 2016/12/7.

Android来电监听和去电监听实现代码

我觉得写文章就得写得有用一些的,必须要有自己的思想,关于来电去电监听将按照下面三个问题展开 1.监听来电去电有什么用? 2.怎么监听,来电去电监听方式一样吗? 3.实战,有什么需要特别注意地方? 监听来电去电能干什么 1.能够对监听到的电话做个标识,告诉用户这个电话是诈骗.推销.广告什么的 2.能够针对那些特殊的电话进行自动挂断,避免打扰到用户 来电去电的监听方式(不一样的方式) 1.来电监听(PhoneStateListener) 来电监听是使用PhoneStateListener类,使用方式