挂断电话的实现(即类似于电话号码黑名单)
在文章的开头先列出以下需要注意的地方:
1、需要用到的权限如下:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/><!--用于读取电话的状态--><uses-permission android:name="android.permission.WRITE_CONTACTS"/><!--用于删除来电记录--><uses-permission android:name="android.permission.CALL_PHONE"/><!--用于挂断电话-->
2、挂断电话所需要用到的类、方法、与包
类:
Class clazz = Class.forName("android.os.ServiceManager");
方法:
Method method = clazz.getMethod("getService", String.class);
包:
所需要用到的包的下载路径为:
下载地址如下:
http://download.csdn.net/detail/caihongshijie6/6282451
代码如下:
在写代码之前先把所需要用到的包导进来。。
1、MainActivity
package com.njupt.endcall1;import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent = new Intent(this,PhoneService1.class);startService(intent);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
2、PhoneService
package com.njupt.endcall1;import java.lang.reflect.Method;import com.android.internal.telephony.ITelephony;import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.provider.CallLog.Calls;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;public class PhoneService1 extends Service {private TelephonyManager tm;private MyPhoneStateListener listener;@Overridepublic void onCreate() {super.onCreate();tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);listener = new MyPhoneStateListener();tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);}private class MyPhoneStateListener extends PhoneStateListener {public MyPhoneStateListener() {}@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_IDLE:break;case TelephonyManager.CALL_STATE_OFFHOOK:break;case TelephonyManager.CALL_STATE_RINGING:endcall(incomingNumber);break;default:break;}}}private void endcall(String incomingNumber) {try {if (incomingNumber.equals("5560")) {Class clazz = Class.forName("android.os.ServiceManager");Method method = clazz.getMethod("getService", String.class);IBinder ibinder = (IBinder) method.invoke(null, Context.TELEPHONY_SERVICE);ITelephony iTelephony = ITelephony.Stub.asInterface(ibinder);iTelephony.endCall();getContentResolver().registerContentObserver(Calls.CONTENT_URI,true, new MyContentObserver(new Handler(), incomingNumber));}} catch (Exception e) {e.printStackTrace();}}private class MyContentObserver extends ContentObserver{private String incomingNumber;public MyContentObserver(Handler handler , String incomingNumber) {super(handler);this.incomingNumber = incomingNumber;}@Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);Uri uri = Calls.CONTENT_URI;getContentResolver().delete(uri," number = ? ", new String[]{incomingNumber});getContentResolver().unregisterContentObserver(this);}}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}}
3、AndroidManifest.xml
<uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.WRITE_CONTACTS"/><uses-permission android:name="android.permission.CALL_PHONE"/>
<service android:name="com.njupt.endcall1.PhoneService1"/>
转载于:https://www.cnblogs.com/james1207/p/3327699.html
挂断电话的实现(即类似于电话号码黑名单)相关推荐
- android 自动拨打电话和挂断电话(反射和intent方式)
欢迎来到博主的技术分享博客 今天分享的技术主要内容是自动拨打电话和挂断电话.自动拨打电话分为两种,一种是通过反射ITelephony这个类直接调用call方法,一种是通过intent方法.而挂断电话则 ...
- 挂断电话并清除通讯录中的记录
1.创建android.telephony包,把NeighboringCellInfo.aidl复制进去. 2.创建com.android.internal.telephony包,把ITelephon ...
- 安卓隐藏摄像_【快讯:诺基亚发布三款安卓机;全面屏手机的最终形态,目标是去掉摄像头;iPhone 打电话不息屏或挂断电话后不亮屏是什么问题?】...
资讯一 [诺基亚发布三款安卓新机:带来了可拆后盖设计] 2月25日,诺基亚在MWC 2019正式召开发布会,发布了诺基亚4.2.诺基亚3.2.诺基亚1 Plus三款全新安卓机型. 其中诺基亚4.2是三 ...
- 黑名单挂断电话及删除电话记录
黑名单挂断电话及删除电话记录 挂断电话 挂断电话需要申请权限android.permission.CALL_PHONE 对于黑名单号码的来电如何挂断,由于监听来电时在TelephonyManager中 ...
- 米2距离感应器的设置问题。无法挂断电话等问题的解决
通话过程中一直黑屏,无法挂断电话 首先打开拨号界面,点击三道杠的菜单键--设置--来电时状态设置--启用距离感应器(打开 ︳),来电防误操作 直接关闭得了.
- Android挂断电话流程
近期在友盟上看到许多关于挂断电话导致崩溃的问题,如下异常 java.lang.NoSuchMethodError: No interface method endCall()Z in class Lc ...
- Android挂断电话以及Java Class Loader
Android中,要自己实现一个挂断电话方法时,很久之前可以endCall().不过现在已经不行了,要应用反射机制,获取到 "android.os.ServiceManager" ...
- Android自动接听和挂断电话实现原理
转自:http://bbs.51cto.com/thread-1078059-1.html 一 前言 这两天要研究类似白名单黑名单以及手势自动接听的一些功能,所以呢,自然而然的涉及到怎么自动接听/挂 ...
- 安卓骚扰拦截挂断电话时候的操作
挂断电话时候需要执行的操作 由于在开发的时候谷歌自己屏蔽了api,所以需要自己找到其api再编写出来. 清单文件添加以下内容 <uses-permissionandroid:name=" ...
最新文章
- 【Java】6.3 类成员
- ibm mq并发访问队列_消息队列之九问九答
- Apache Camel 3.1 –更多骆驼核心优化(第2部分)
- 名为 cursor_jinserted 的游标不存在_生鲜电商存在的问题及对策解析:未来生鲜电商如何发展?...
- CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别-Windows绘图基础知识
- PHP拦截器的使用(转)
- Jetty和Tomcat
- Tomcat类加载器为何违背双亲委派模型
- Web前端实战:管理系统网页的初步设计
- python xlsm_“xlwings”:不支持写入.xlsm文件?
- 【英语学习】【医学】生物化学(biochemistry)系统
- 为什么不建议轻行量玩频
- android studio中注解处理器的调试配置
- javascript-obfuscator 代码混淆
- Java计算商品的促销日期
- 为tableview添加带控件的单元格如复选框checkbox与combbox单元格
- JAVA基础学习-复习day11
- Python可以用来做什么?
- HMI-4-[Qt超内存]:解决qrc文件过大问题
- form表单序列化 $('#form1').serialize()到后台没值
热门文章
- 中国染料产业竞争格局分析与消费需求调研报告2022版
- 【万字解读】数据可视化图表使用场景大全 !
- Android攻城狮Dialog
- php微信调用天气api,微信公众号接口开发--snoweek测试
- 阿里云6·18新玩法上线:邀好友送天猫超市卡 更有机会赢得iPhone 12 Pro!
- 国外计算机从什么开始学,从零开始学电脑知识 1(国外英语资料).doc
- java中fido_一文读懂华为FIDO2指纹/3D 面容登录技术
- 三坐标检测之测量基准面的选择
- 基于Cisco Packet Tracer的中小型网吧组网设计方案
- java中,判断当前时间是否处于某个一个时间段内