Android 设置电话号码拦截(黑名单)

转载请说明出处

最近在做公司新产品的设计,想到电话号码拦截效果设计加入到项目应该挺不错的。所以我们想将这个设计理念加入到我们的产品中。
以下是一个小demo

XML代码:

<?xml version="1.0" encoding="utf-8"?>
<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:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical"tools:context="com.dzz.android23_ecd.MainActivity"><TextView
        android:layout_width="match_parent"android:layout_height="wrap_content"android:text="黑名单"/><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><EditText
            android:layout_width="0dp"android:layout_height="wrap_content"android:hint="请输入黑名单号码"android:id="@+id/et_main"android:phoneNumber="true"android:layout_weight="6"/><Button
            android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="2"android:text="联系人"android:onClick="phone"/></LinearLayout><Button
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="设置为"android:onClick="set"android:layout_gravity="center"/>
</LinearLayout>

给联系人和设置按钮加事件
Java代码:

package com.dzz.android23_ecd;import android.app.Activity;
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private EditText et_main;private PendingIntent pendingIntent;private SmsManager smsManager;private String usernumber;private String username;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_main = (EditText) findViewById(R.id.et_main);//保存电话号码String eet= Define.getString(MainActivity.this,"con","");et_main.setText(eet);pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(), 0);smsManager = SmsManager.getDefault();}public void phone(View view){startActivityForResult(new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI), 0);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == Activity.RESULT_OK) {ContentResolver reContentResolverol = getContentResolver();Uri contactData = data.getData();@SuppressWarnings("deprecation")Cursor cursor = managedQuery(contactData, null, null, null, null);cursor.moveToFirst();//联系人名字username = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));Cursor phone = reContentResolverol.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId,null,null);while (phone.moveToNext()) {//联系人号码usernumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));et_main.setText(usernumber +" ("+ username +")");}}}public void set(View view) {final String et = et_main.getText().toString();AlertDialog.Builder dl = new AlertDialog.Builder(MainActivity.this);dl.setTitle("温馨提示");LayoutInflater inflater = getLayoutInflater();dl.setMessage("你确定将" + et + "号码设置为黑名单吗?");dl.setPositiveButton("确定", new DialogInterface.OnClickListener() {private String ee;@Overridepublic void onClick(DialogInterface dialogInterface, int i) {if(et.indexOf("(")<0){ee=et;}else{ee = et.substring(0,et.indexOf("("));}Toast.makeText(MainActivity.this, "设置成功!", Toast.LENGTH_SHORT).show();Define.setString(MainActivity.this,"con",ee);}});dl.setNegativeButton("还是算了", null);dl.show();}
}

因为还要获取手机号码
还要新建一个类存手机号码

package com.dzz.android23_ecd;import android.content.Context;
import android.content.SharedPreferences;/*** Created by 朝花偏不夕拾 on 2017/2/9.*/public class Define {public static void setString(Context context, String key, String value){SharedPreferences sharedPreferences=context.getSharedPreferences("con",Context.MODE_PRIVATE);SharedPreferences.Editor editor=sharedPreferences.edit();editor.putString(key,value);editor.commit();}public static String getString(Context context, String key, String defValue){SharedPreferences sharedPreferences = context.getSharedPreferences("con", Context.MODE_PRIVATE);return sharedPreferences.getString(key, defValue);}}

还要在新建一个类
来获取电话状态

package com.dzz.android23_ecd;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.RemoteException;
import android.telephony.TelephonyManager;
import android.util.Log;import com.android.internal.telephony.ITelephony;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/*** Created by 朝花偏不夕拾 on 2017/2/13.*/public class Myphoone extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if("android.intent.action.PHONE_STATE".equals(intent.getAction())){//得到电话管理者TelephonyManager telephonyManager= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);//得到电话的状态int state=telephonyManager.getCallState();switch (state) {case TelephonyManager.CALL_STATE_RINGING://得到电话号码String number=intent.getStringExtra("incoming_number");Log.i("test","来电了"+number);//得到电话管理者类对象Class<TelephonyManager> clazz=TelephonyManager.class;//得到方法Method method= null;try {method = clazz.getDeclaredMethod("getITelephony",null);} catch (NoSuchMethodException e) {e.printStackTrace();}//允许访问私有的方法method.setAccessible(true);//执行方法ITelephony iTelephony= null;try {iTelephony = (ITelephony) method.invoke(telephonyManager,null);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}// /判断是不是这个号码是的话就挂断//保存电话号码String de= Define.getString(context,"con","").trim();if(de.equals(number)){try {iTelephony.endCall();} catch (RemoteException e) {e.printStackTrace();}}break;case TelephonyManager.CALL_STATE_OFFHOOK:Log.i("test","通话中...录音中");break;case TelephonyManager.CALL_STATE_IDLE:Log.i("test","挂了");break;}}}
}

还要在清单文件下配置一下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.dzz.android23_ecd"><!--读取电话状态的权限--><uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission><uses-permission android:name="android.permission.CALL_PHONE"></uses-permission><!--读取联系人的权限--><uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission><!--读--><uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission><!--写--><application android:allowBackup="true" android:icon="@mipmap/ic_launcher"android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><receiver android:name=".Myphoone"><intent-filter><action android:name="android.intent.action.PHONE_STATE"></action></intent-filter></receiver></application></manifest>

最后还要加载一个AIDL
先把Android 切换成 Project 模式
在项目的main下新建一个文件夹 叫aidl然后把下面这个文件复制进去就好了

去云盘下载下来
http://pan.baidu.com/s/1nuMoD2x

Android 设置电话号码拦截(黑名单)相关推荐

  1. 设置电话拦截返回音浅析

    相信很多Android手机用户都用过手机安全软件的"电话拦截"功能,不管您用的是360安全卫士.腾讯手机管家,还是金山毒霸-,它们的共同特点就是您在设置来电拦截黑名单或开启/关闭来 ...

  2. Android拦截黑名单(简易版)

    拦截黑名单的话,一般都是去系统数据库里面取值,判断来电手机号码或者短信号码是否在我黑名单数据中是否存在.如果存在就拦截.而我这里就投机取巧了,没有去数据库.只是简单的拦截,将数据写死了! 来上代码: ...

  3. android 11.0 设置wifi列表黑名单(ssid不显示wifi列表)

    1.概述 在11.0的定制化开发中,可以要求设置某些wifi不出现在wifi列表中,然后实现不让连接此wifi的功能,就是设置wifi黑名单的功能,屏蔽这个wifi的连接功能,实现这个功能就需要了解w ...

  4. android 9.0 10.0 设置wifi列表黑名单(ssid不显示wifi列表)

    1.概述 在10.0的产品定制化开发中,可以要求设置某些wifi不出现在wifi列表中,然后实现不让连接此wifi的功能,就是设置wifi黑名单,wifiManager管理所有wifi操作,接口就加在 ...

  5. android 12.0 设置wifi列表黑名单(ssid不显示wifi列表)

    1.前言 在12.0的rom定制化开发中,在系统的产品开发中,对于wifi产品功能需求,可以要求设置某些wifi不出现在wifi列表中,然后实现不让连接此wifi的功能,就是设置 wifi黑名单的功能 ...

  6. android 设置联系人头像代码,Android根据电话号码获得联系人头像实例代码

    在日常Android手机的使用过程中,根据电话号码获得联系人头像,是经常会碰到的问题.本文即以实例形式讲述了Android根据电话号码获得联系人头像是实现代码.分享给大家供大家参考之用.具体方法如下: ...

  7. 关于Android短信拦截(二)

    题外话:因为这是一篇来自百度的文章,并且在好多网站中都有转载,但却没有标明出处,所以我也搞不清作者是何人,特在此声.另外,关于这个例子的实现,一定要注意权限的设置,我在这里例子的实验中,由于没有找到S ...

  8. Android N BlockedNumberContract原生黑名单(一)

    Android N BlockedNumberContract原生黑名单(一) Google 从Android N 开始从原生上支持号码屏蔽也就是电话黑名单功能,相关原文翻译如下:    号码屏蔽  ...

  9. Android Java虚拟机拦截技术分析

    2019独角兽企业重金招聘Python工程师标准>>> 最近反编译金山毒霸,分析其广告拦截功能是如何实现的.根据金山毒霸的介绍,采用了java虚拟机拦截技术,带着好奇去研究了一下.在 ...

  10. Android-Hybrid-问题收集Android客户端无法拦截Vue路由的问题

    1. 在Android客户端或Chrome浏览器弹出一个引导用户关注公众号的二维码 描述 客户端加载线上义诊Url,偶尔会弹出一个要求关注丁香园公众号的二维码 问题分析 后端会根据当前登录用户向前端界 ...

最新文章

  1. BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的
  2. 12 | 套路篇:CPU 性能优化的几个思路
  3. 大数据的说法 正确的是_前端测试题:(解析)用于播放音频文件的正确HTML5元素是?...
  4. 判读一个对象不为空_“人不为己,天诛地灭”的真实含义
  5. 区块链音乐流媒体平台ROCKI版税收入权NFT售价达40 ETH
  6. Windows域策略设置 禁止客户端上网【全域策略生效】
  7. Quartz+Spring 自定义作业调度(作业在DB中配置)
  8. 老生常谈之CSS的垂直居中
  9. python的整数类型_python基本数据类型
  10. 安徽大学大学计算机网络教学平台,安徽大学-网络教学综合平台.DOC
  11. win7万能声卡驱动_IT天空出品的万能驱动 7 发布下载
  12. 实现音乐播放器歌词显示效果
  13. 在c语言中的变量分为三种类型,在C语言中的实型变量分为两种类型,它们是_______和__________ 答案:float double...
  14. 大数据分析笔记 (4) -关联规则(Association Rules)
  15. Transforms的结构和用法
  16. qt轻松实现不规则按钮
  17. java斜体_设置标签字体用粗体和斜体
  18. 【夜读】做好这6件事,让人受益一生
  19. 浅析缓冲区溢出漏洞的利用与Shellcode编写
  20. linux修复引导工具,linux 修复引导工具

热门文章

  1. QQ是成年人的“不老神仙水”
  2. 如何使用matlab进行音频信号处理+代码编译中会遇到的问题+matlab安装包
  3. 菜鸟教程java在线编辑器_HTML 编辑器
  4. 服务器dump文件位置,dump解析入门-用VS解析dump文件进行排障
  5. Hyperworks——Optistruct学习分享
  6. lopatkin俄大神最新精简中文系统Windows 7 Professional VL SP1 7601.24496 x86-x64 ZH-CN DREY
  7. java基础之java输入输出语句
  8. 移远EC20基站定位
  9. 网络节点是计算机与网络的什么,网络节点是什么意思?
  10. 【Linux】Linux根据文件路径查找索引节点