1.布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/ma_itc_et"         />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="确认"        android:onClick="yes"/>LinearLayout>

2.java代码

public class MainActivity extends AppCompatActivity {    private EditText ma_itc_et;    private String number;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ma_itc_et = (EditText) findViewById(R.id.ma_itc_et);        //从SharedPreferences获取保存号码的路径        SharedPreferences spe = this.getSharedPreferences("yyy", this.MODE_PRIVATE);        //根据路径来得到取出保存的号码        String data =spe.getString("code", "");        ma_itc_et.setText(data);    }    public void yes(View view) {        number = ma_itc_et.getText().toString();        //把输入框里面的值通过SharedPreferences保存,第一个参数是取个文件名        SharedPreferences.Editor editor = getSharedPreferences("yyy", MODE_WORLD_WRITEABLE).edit();        //第一个参数是键,第二个是电话号码        editor.putString("code", number);        editor.commit();    }}

3.注册一个广播

public class MyphoneState extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        if ("android.intent.action.PHONE_STATE".equals(intent.getAction())) {            String phone = intent.getStringExtra("incoming_number");            //从SharedPreferences获取保存号码的路径            SharedPreferences spe = context.getSharedPreferences("yyy", context.MODE_PRIVATE);            //根据路径来得到取出保存的号码            String data =spe.getString("code", "");            //把来电的号码跟你输入的号码判断            //其实可以不用判断也不用页面那样的话任何来电都会挂断            if (phone.equals(data)) {                TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);                int state = telephonyManager.getCallState();                switch (state) {                    //来电状态                    case TelephonyManager.CALL_STATE_RINGING:                        //得到TelephonyManager的Class对象                        Class telephonyManagerClass = TelephonyManager.class;                        try {                            //得到TelephonyManager.getITelephony方法的Method对象                            Method method = telephonyManagerClass.getDeclaredMethod("getITelephony", null);                            //允许访问私有方法                            method.setAccessible(true);                            //调用getITelephony方法发挥ITelephony对象                            ITelephony telephony = (ITelephony) method.invoke(telephonyManager, null);                            //挂断电话                            telephony.endCall();                        } catch (Exception e) {                            e.printStackTrace();                        }                        break;                    //通话状态                    case TelephonyManager.CALL_STATE_OFFHOOK:                        break;                    //挂断状态                    case TelephonyManager.CALL_STATE_IDLE:                        break;                }            }        }    }}

4.在AndroidManifest文件添加权限和配置广播

    <uses-permission android:name="android.permission.READ_PHONE_STATE">uses-permission>        <uses-permission android:name="android.permission.CALL_PHONE">uses-permission><receiver android:name=".MyphoneState">            <intent-filter>                <action android:name="android.intent.action.PHONE_STATE">action>            intent-filter>        receiver>

5.在项目下建个aidl文件夹,把这两个文件夹复制进去
Android之实现手机号码拦截_第1张图片

更多相关文章

  1. android获取本地视频路径
  2. Android 中的 Looper 对象
  3. Android Studio更改SDK或者JDK路径
  4. Android数据存储路径位置
  5. android apk 安装路径 包名解析 覆盖安装等问题
  6. 关于Android/java的复杂对象的深拷贝和浅拷贝
  7. android 根据apk文件路径获取图标
  8. android--------根据文件路径使用File类获取文件相关信息
  9. Android获取存储卡路径的方式

随机推荐

  1. 如何学插画?插画绘画人物画法
  2. 镜像格式二十年:从 Knoppix 到 OCI-Image-
  3. 如何学插画?插画绘画人物画法
  4. 【北亚数据恢复】分布式存储hbase和hive
  5. MongoDB 4.X CRUD 基本操作说明
  6. CentOS 8 EOL如何切换源?
  7. 如何加快 Node.js 应用的启动速度
  8. Linux服务器配置ulimit的常用参数介绍
  9. Springboot docker jenkins 自动化部署并
  10. PHP 中通过 getopt 解析 GNU C 风格命令