`

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

阅读更多

通过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"/>

分享到:
评论

相关推荐

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

    在Android平台上,实现来电自动挂断并回复短信的功能涉及到多个技术层面,主要涵盖电话管理和短信管理API的使用,以及系统权限的申请。以下是对这些知识点的详细解释: 1. **电话反射机制**: Android系统为了安全...

    安卓短信彩信相关相关-Android实现来电自动挂断并回复短信.zip

    这个压缩包“安卓短信彩信相关-Android实现来电自动挂断并回复短信.zip”包含了一些源码和资源,可能有助于开发者了解如何实现这样的功能。尽管文件列表中并未直接给出具体的代码文件,但我们可以根据提供的信息推测...

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

    在Android系统中,拨打电话和挂断电话通常是通过标准的Intent机制来实现的,但有时候开发者可能需要在特定情况下通过程序逻辑控制这些操作,比如在自动化测试或者特殊应用中。本教程将介绍如何利用Java的反射机制来...

    Android应用源码之 实现自动接听和挂断电话功能).zip

    在Android应用开发中,实现自动接听和挂断电话的功能是一个高级话题,涉及到系统级权限、来电监听和服务等关键概念。这个源码项目提供了一个实际的示例,可以帮助开发者理解和掌握这些技术。 首先,我们要理解...

    安卓Android源码——实现自动接听和挂断电话功能.zip

    5. **自动挂断**:若需实现挂断电话,可以在合适的时机(如通话已建立,即状态为`TelephonyManager.CALL_STATE_OFFHOOK`)调用`endCall()`方法。同样,非系统应用可能无权执行此操作,需要寻找其他策略,如发送特定...

    android实现接通和挂断电话

    监听电话状态变化可以实现电话自动接听和挂断功能。 9. 安全性 实现电话控制操作需要考虑安全性问题,例如需要权限控制和数据加密等。安全性问题可以通过权限控制和数据加密来解决。 Android系统中实现接通和挂断...

    精典源码之 实现自动接听和挂断电话功能.rar

    4. **自动挂断**:若需要在特定条件下挂断电话,可以调用`hangupCall()`方法。这同样需要通过`ITelephony`接口实现,代码结构类似接听电话的实现。 5. **处理来电广播**:除了使用电话状态监听器,还可以通过注册...

    Android应用源码之 实现自动接听和挂断电话功能(shop71713971.taobao.com).rar

    在Android平台上,开发一款能够自动接听和挂断电话的应用是一个涉及到系统权限和电话管理API的复杂任务。这个源码提供了一个实例,展示了如何在Android应用中实现这一功能。以下是相关的关键知识点: 1. **电话监听...

    Android来电时停止音乐播放的流程学习

    ### Android来电时停止音乐播放的流程学习 #### 场景分析 在Android系统中,针对来电时音乐播放的控制机制可以分为以下两种典型场景: 1. **电话处于响铃模式时**: - 当有来电时,系统首先会自动暂停正在后台...

    Android高级应用源码-android打电话源码.zip

    以下是对"Android高级应用源码-android打电话源码.zip"中可能包含的关键知识点的详细说明: 1. **权限管理**:在Android系统中,拨打和接听电话属于敏感操作,因此需要在`AndroidManifest.xml`文件中声明相应的权限...

    Android来电拦截的实现方法

    在Android平台上,实现来电拦截功能主要涉及到监听电话状态和处理拨出电话的广播接收器。以下将详细讲解如何实现这一功能。 首先,要在AndroidManifest.xml文件中声明必要的权限,以允许应用读取电话状态、拨打电话...

    android实战 拦截史迪仔电话(android studio源程序工程)

    在Android平台上进行应用程序开发时,有时我们需要实现特定的功能,例如本例中的“拦截史迪仔电话”。这个项目是一个实战教程,旨在帮助初学者理解和掌握Android Studio的使用以及Android移动开发的基础知识。通过...

    Android应用源码之来电弹屏实例代码,带关闭按钮-IT计算机-毕业设计.zip

    - Android系统提供了电话监听接口,主要通过`PhoneStateListener`类来实现。通过注册监听器,我们可以获取到电话的状态变化,如电话挂断、拨出、打进等事件。 - 在`onCallStateChanged()`方法中,可以处理不同的...

    Android5.0来电界面InCallUI源码

    通过研究源码,开发者可以了解Android电话系统的底层机制,为自定义通话界面或者开发相关应用提供宝贵的知识。无论是对系统级开发者还是应用开发者来说,理解InCallUI的工作原理都是提升开发能力的重要一步。

    Android 来电拦截及拦截后的提示音源码.zip

    本文将详细解析如何实现Android来电拦截以及拦截后播放自定义提示音的源码技术。 首先,来电拦截是通过Android的电话服务(TelephonyManager)和电话状态监听器(PhoneStateListener)来实现的。以下是一些关键步骤...

    android来电拦截

    总的来说,"android来电拦截"项目涵盖了Android广播接收器、电话状态监听、数据库操作、用户界面设计、权限管理等多个方面的知识。开发者需要熟练掌握Android开发技术,以及对用户需求的理解,才能创建出一款高效且...

    androlid电话状态监控

    ### 和roid电话状态监控与自动挂断电话技术详解 ...总之,掌握电话状态监控和AIDL实现自动挂断电话的技术,不仅能够提升应用的实用性和用户体验,还能够在复杂多变的移动环境中保持应用的稳定性和可靠性。

Global site tag (gtag.js) - Google Analytics