Android实现来电自动挂断实现机制

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

通过aidl及反射实现挂断电话
具体分三步:
(1)ITelephony.aidl ,必须新建com.android.internal.telephony包并放入ITelephony.aidl文件(构建后在gen下有ITelephony.java文件,这是aidl生成的接口),文件内容如下:
package com.android.internal.telephony;
interface ITelephony{
    boolean endCall();
    void answerRingingCall();
}
(2)在需要的类中添加如下方法,代码如下(通过反射获取电话接口的实例)

/**
     * @param context
     * @return
     */
    private static ITelephony getITelephony(Context context) {
        TelephonyManager mTelephonyManager = (TelephonyManager) context
                .getSystemService(TELEPHONY_SERVICE);
        Class<TelephonyManager> c = TelephonyManager.class;
        Method getITelephonyMethod = null;
        try {
            getITelephonyMethod = c.getDeclaredMethod("getITelephony",
                    (Class[]) null); // 获取声明的方法
            getITelephonyMethod.setAccessible(true);
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }

        try {
            ITelephony iTelephony = (ITelephony) getITelephonyMethod.invoke(
                    mTelephonyManager, (Object[]) null); // 获取实例
            return iTelephony;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return iTelephony;
    }

(3)在来电时调用此实例,然后调用此endCall()方法。

mTelephonyManager = (TelephonyManager) this
                .getSystemService(TELEPHONY_SERVICE);
        mTelephonyManager.listen(phoneStateListener,
                PhoneStateListener.LISTEN_CALL_STATE);

//电话实例
PhoneStateListener phoneStateListener = new PhoneStateListener() {

        @Override
        public void onCallStateChanged(int state, String incomingNumber) {

            switch (state) {
                case TelephonyManager.CALL_STATE_RINGING :
                    iTelephony = getITelephony(getApplicationContext()); //获取电话接口
                    if (iTelephony != null) {
                        try {
                            iTelephony.endCall(); // 挂断电话
                            Toast.makeText(getApplicationContext(),
                                    "endCall "+ incomingNumber +"  successful!", 3000).show();
                        } catch (RemoteException e) {
                            e.printStackTrace();
                        }
                    }
                    break;
                default :
                    break;
            }
        }

    };

 

//注意:在功能清单文件中添加电话的权限:

 

<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

 

 

 

================实例使用如下

TelephonyManager  manger=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);
  manger.listen(new MyphoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);

//电话状态监听类

public class MyphoneStateListener extends PhoneStateListener{
  
  @Override
  public void onCallStateChanged(int state, String incomingNumber) {
   switch(state){
   case TelephonyManager.CALL_STATE_RINGING:
    db=Mydb_blacklist.getDB(getApplicationContext());
    if(isBlacklist(incomingNumber)){ 
//isBlacklist()方法用来判断此号码是否在黑名单中,查询下数据库,或者自己保存的数组文件
     try {
      Method method = Class.forName(
        "android.os.ServiceManager").getMethod(
        "getService", String.class);
       // 获取远程TELEPHONY_SERVICE的IBinder对象的代理
       IBinder binder = (IBinder) method.invoke(null,
        new Object[] { TELEPHONY_SERVICE });
       // 将IBinder对象的代理转换为ITelephony对象
       ITelephony telephony = ITelephony.Stub
        .asInterface(binder);
       // 挂断电话
       telephony.endCall();
    
     } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     } 
     
    }
    break;
   }
   super.onCallStateChanged(state, incomingNumber);
  }
 }
安卓电话自动化:实现自动接听与挂断功能 在当今智能手机的日常使用中,自动接听和挂断电话已成为一项需求,尤其是在特定场景中,如电话会议、重要任务执行期间,用户希望手机能够自动处理来电。安卓自动接电话和自动挂电话功能的实现,不仅仅是为了提升用户体验,更是一种智能与便捷性的体现。通过编程实现这一功能,可以大大减少用户在特定环境下的操作负担,同时也能在一定程度上帮助用户管理自己的电话通讯。实现这一功能的基础是安卓系统的电话管理API,它允许开发者编写代码来响应电话事件,如来电、去电和通话状态变化等。 阅读详情

相关推荐

Android实现来电自动挂断并回复短信

自己在练习电话接口反射机制的时候,写的一个小应用。对了解电话反射机制大有帮助.

android自动挂掉电话,Android-实现电话自动接听/电话自动挂断功能

Android平台上,有很多这类型的功能,比如,拦截流氓广告电话的功能,比如,自定义来电界面的功能,这些功能的实现,都基于我们通过程序代码去实现自定接听电话或者自动挂断电话。前阵子研究了一段时间关于这个功能,适配了andorid各个版本,基本实现大部分机型能够实现自动接听和自动挂断。趁着这会有空,记录一下,希望能帮到有需要的人。监听来电情况这个很简单,我们只需要声明一个BroadcastRece...

weixin_34564735的博客 3083

android 通过反射自动拨打电话和挂断电话

这是一个通过反射自动拨打电话和挂断电话的demo,如果不知道原理的,可去http://blog.csdn.net/u013895206 博客了解下原理。

Android自动挂断电话

Android自动挂断电话   android的新版本已经把Phone类给隐藏起来了,想要用代码实现挂断电话,就必须通过AIDL才行, 第一步:在程序中新建一个包,包名必须为:com.android.internal.telephony,因为要使用aidl, 第二步:在这个包里面新建一个名为ITelephony.aidl的文件,然后在文件里面写入代码: package com.androi

勿六七的博客 2488

android 挂断 电话 反射,Android实现来电自动挂断实现机制

通过aidl及反射实现挂断电话具体分三步:(1)ITelephony.aidl ,必须新建com.Android.internal.telephony包并放入ITelephony.aidl文件(构建后在gen下有ITelephony.java文件,这是aidl生成的接口),文件内容如下:package com.android.internal.telephony;interface ITeleph...

weixin_30334411的博客 326

android 来电自动接听和自动挂断

android 来电自动接听和自动挂断     注意:android2.3版本不支持下面的自动接听方法。(会抛异常:java.lang.SecurityException: Neither user xxxxx nor current process has android.permission.MODIFY_PHONE_STATE.)     第一步:准备应用环境需要的系统包...

whatsyourname的专栏 478

android 来电拒接_[置顶] android开发来电自动拒接并自动回复短信_上课模式app...

上课的时候老师说总是错过电话,对方打来没人接还一遍遍的打,觉得可以有个app在上课期间自动拒接电话,并自动回复短信过去.当然了,需要权限的.尝试做了个雏形出来.界面如下:主要代码如下:package jason.teacher;import java.lang.reflect.Method;import java.util.HashMap;import java.util.List;import ...

weixin_33961375的博客 401

14.探秘TelephonyManager

上次介绍了如何使用JAVA的反射机制来调用蓝牙的隐藏API,这次继续练习JAVA的反射机制,探秘TelephonyManager在Framework里包含却在SDK隐藏的几项功能。先来看看本文程序运行的效果图: 本文程序演示了以下功能: 1.所有来电自动接听; 2.所有来电自动挂断; 3.开启/关闭Radio; 4.开启/关闭数据连接(WAP or NET的连

天。朝程序猿的专栏 967

拦截来电

public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { ...

weixin_30546189的博客 102

android开发来电自动拒接并自动回复短信_上课模式app

上课的时候老师说总是错过电话,对方打来没人接还一遍遍的打,觉得可以有个app在上课期间自动拒接电话,并自动回复短信过去. 当然了,需要权限的. 尝试做了个雏形出来. 界面如下: 主要代码如下: package jason.teacher; import java.lang.reflect.Method; import java.util.HashMap; import ja...

ithome 375

Android拒绝来电实现--ITelephony类的反射

<br /><br />NeighboringCellInfo.aidl<br />package android.telephony; parcelable NeighboringCellInfo; <br />ITelephony.aidl<br />/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"

GEOLO的专栏 1万+

Android 自动接听电话和挂断

注意:android2.3版本及以上不支持下面的自动接听方法。(会抛异常:java.lang.SecurityException: Neither user xxxxx nor current process has android.permission.MODIFY_PHONE_STATE.) 原因:android2.3版本及以上android.permission.MODIFY_PHONE_

YiRong 3131

Android实现手机号码拦截(附带源码)

Android实现手机号码拦截(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1539

android p通话录音功能,Android编程实现通话录音功能的方法

本文实例讲述了Android编程实现通话录音功能的方法。分享给大家供大家参考,具体如下:因受系统限制,只能录自已麦的声音,录不到对方的声音,可能需要改内核才能实现双向录音;接通电话和挂断电话时,震动一下;使用广播接收者实现自启动;服务代码:package com.eboy.phoneListener;import java.io.File;import android.app.Service;im...

weixin_33662445的博客 757

[置顶] android开发来电自动拒接并自动回复短信_上课模式app

上课的时候老师说总是错过电话,对方打来没人接还一遍遍的打,觉得可以有个app在上课期间自动拒接电话,并自动回复短信过去. 当然了,需要权限的. 尝试做了个雏形出来. 界面如下: 主要代码如下: package jason.teacher; import java.lang.reflect.Method; import java.util.HashMap; import ja...

weixin_34100227的博客 145

Android 用代码实现防打扰【能够屏蔽电话和短信】

在玩手机游戏的时候,会遇到一种情况是,玩得特别爽的时候,突然一个电话【短信】打过来,可能导致之前所做的一切都白费了,有要重新来过【针对部分游戏,一旦切出去,再进入到游戏是需要重新加载】,这时候 手机的防打扰功能就体现出来了。。 1.要想拦截,就需要实现广播接口,即【BroadcastReceiver】  检测到电话来时,则挂断电话,同时保存来电的电话号码,一做特殊处理【发信息或者一段时间后提示

田强强 4522
上一篇: 如何读取系统联系人姓名和电话号码(1)
下一篇: 音频文件操作1(系统铃声)
29boy
博客等级 码龄17年 7粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值