在文章的开头先列出以下需要注意的地方:

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

挂断电话的实现(即类似于电话号码黑名单)相关推荐

  1. android 自动拨打电话和挂断电话(反射和intent方式)

    欢迎来到博主的技术分享博客 今天分享的技术主要内容是自动拨打电话和挂断电话.自动拨打电话分为两种,一种是通过反射ITelephony这个类直接调用call方法,一种是通过intent方法.而挂断电话则 ...

  2. 挂断电话并清除通讯录中的记录

    1.创建android.telephony包,把NeighboringCellInfo.aidl复制进去. 2.创建com.android.internal.telephony包,把ITelephon ...

  3. 安卓隐藏摄像_【快讯:诺基亚发布三款安卓机;全面屏手机的最终形态,目标是去掉摄像头;iPhone 打电话不息屏或挂断电话后不亮屏是什么问题?】...

    资讯一 [诺基亚发布三款安卓新机:带来了可拆后盖设计] 2月25日,诺基亚在MWC 2019正式召开发布会,发布了诺基亚4.2.诺基亚3.2.诺基亚1 Plus三款全新安卓机型. 其中诺基亚4.2是三 ...

  4. 黑名单挂断电话及删除电话记录

    黑名单挂断电话及删除电话记录 挂断电话 挂断电话需要申请权限android.permission.CALL_PHONE 对于黑名单号码的来电如何挂断,由于监听来电时在TelephonyManager中 ...

  5. 米2距离感应器的设置问题。无法挂断电话等问题的解决

    通话过程中一直黑屏,无法挂断电话 首先打开拨号界面,点击三道杠的菜单键--设置--来电时状态设置--启用距离感应器(打开 ︳),来电防误操作 直接关闭得了.

  6. Android挂断电话流程

    近期在友盟上看到许多关于挂断电话导致崩溃的问题,如下异常 java.lang.NoSuchMethodError: No interface method endCall()Z in class Lc ...

  7. Android挂断电话以及Java Class Loader

    Android中,要自己实现一个挂断电话方法时,很久之前可以endCall().不过现在已经不行了,要应用反射机制,获取到 "android.os.ServiceManager" ...

  8. Android自动接听和挂断电话实现原理

    转自:http://bbs.51cto.com/thread-1078059-1.html 一  前言 这两天要研究类似白名单黑名单以及手势自动接听的一些功能,所以呢,自然而然的涉及到怎么自动接听/挂 ...

  9. 安卓骚扰拦截挂断电话时候的操作

    挂断电话时候需要执行的操作 由于在开发的时候谷歌自己屏蔽了api,所以需要自己找到其api再编写出来. 清单文件添加以下内容 <uses-permissionandroid:name=" ...

最新文章

  1. 【Java】6.3 类成员
  2. ibm mq并发访问队列_消息队列之九问九答
  3. Apache Camel 3.1 –更多骆驼核心优化(第2部分)
  4. 名为 cursor_jinserted 的游标不存在_生鲜电商存在的问题及对策解析:未来生鲜电商如何发展?...
  5. CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别-Windows绘图基础知识
  6. PHP拦截器的使用(转)
  7. Jetty和Tomcat
  8. Tomcat类加载器为何违背双亲委派模型
  9. Web前端实战:管理系统网页的初步设计
  10. python xlsm_“xlwings”:不支持写入.xlsm文件?
  11. 【英语学习】【医学】生物化学(biochemistry)系统
  12. 为什么不建议轻行量玩频
  13. android studio中注解处理器的调试配置
  14. javascript-obfuscator 代码混淆
  15. Java计算商品的促销日期
  16. 为tableview添加带控件的单元格如复选框checkbox与combbox单元格
  17. JAVA基础学习-复习day11
  18. Python可以用来做什么?
  19. HMI-4-[Qt超内存]:解决qrc文件过大问题
  20. form表单序列化 $('#form1').serialize()到后台没值

热门文章

  1. 中国染料产业竞争格局分析与消费需求调研报告2022版
  2. 【万字解读】数据可视化图表使用场景大全 !
  3. Android攻城狮Dialog
  4. php微信调用天气api,微信公众号接口开发--snoweek测试
  5. 阿里云6·18新玩法上线:邀好友送天猫超市卡 更有机会赢得iPhone 12 Pro!
  6. 国外计算机从什么开始学,从零开始学电脑知识 1(国外英语资料).doc
  7. java中fido_一文读懂华为FIDO2指纹/3D 面容登录技术
  8. 三坐标检测之测量基准面的选择
  9. 基于Cisco Packet Tracer的中小型网吧组网设计方案
  10. java中,判断当前时间是否处于某个一个时间段内