Android三方应用如何挂断电话

作者: 代码视觉 | 来源:发表于2017-10-20 14:47 被阅读54次

Android 源码中挂断电话的方法众多,但大多数都是对系统级的开放,三方应用想调用这些接口基本是不行的.可以看看下面列出的两个例子,这些接口都冠以 @SystemApi的注解,三方应用是无法直接进行调用的。
例如Telecommmanager.java中

    @SystemApi
    public boolean endCall() {
        try {
            if (isServiceConnected()) {
                return getTelecomService().endCall();
            }
        } catch (RemoteException e) {
            Log.e(TAG, "Error calling ITelecomService#endCall", e);
        }
        return false;
    }

同样在TelephonyManager.java中

    /** @hide */
    @SystemApi
    public boolean endCall() {
        try {
            ITelephony telephony = getITelephony();
            if (telephony != null)
                return telephony.endCall();
        } catch (RemoteException e) {
            Log.e(TAG, "Error calling ITelephony#endCall", e);
        }
        return false;
    }

那么三方应用想实现在自己的程序代码中挂断电话,就需要使用AIDL配合反射来进行实现。

AIDL文件,这里需要注意的是包名必须是com.android.internal.telephony

// ITelephony.aidl
package com.android.internal.telephony;
interface ITelephony {
  boolean endCall();
}

具体实现挂断电话的方法如下:

  public static ITelephony getITelephony(Context context) {
        TelephonyManager mTelephonyManager = (TelephonyManager) context
                .getSystemService(TELEPHONY_SERVICE);
        Class 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 null;
        }
    }

完了之后可以直接在代码中通过调用getITelephony(Context).endCall();来进行通话的挂断。

相关文章

  • Android三方应用如何挂断电话

    Android 源码中挂断电话的方法众多,但大多数都是对系统级的开放,三方应用想调用这些接口基本是不行的.可以看看...

  • 查看apk签名信息和第三方应用的签名信息

    Android如何查看应用签名信息 介绍Android如何查看自己的应用签名及三方APK或系统APK签名信息,包含...

  • React Naitve唤醒三方APP

    可以通过此方法唤醒内置应用 如设置、电话簿.....或者调用三方应用 android唤醒 android 唤醒AP...

  • APP调起支付宝

    参考链接Android打开第三方应用方法总结Android应用市场和应用包名大全

  • 挂断的电话

    打通了电话 而又挂断了电话 想听听你的声音 想说说我的思念 却又不想听到你敷衍塞责 “忙!” 是不想跟我说话的借口...

  • 电话挂断之后……

    因为刚输完化疗药,我难受的无法用语言形容,手脚又麻又痛,胸口仿佛压了块巨石一般,昏昏沉沉却无法睡着,此时、电话响了...

  • 挂断的电话

    想你了! 想跟你说说, 心头忽的冒发的思念; 想跟你说说, 你走的那一瞬间, 我有跟你走的念头。 你知道吗? 不管...

  • Android7.0 第三方应用无法访问私有库

    Android7.0 第三方应用无法访问私有库 由于Android7.0安全机制更严格,第三方应用无法使用syst...

  • Android笔记01:Android体系结构

    Android体系结构 Applications(应用程序层) *Android系统自带或者第三方安装的应用 Ap...

  • 挂断电话之后……

    北方的秋,来得很是及时,早晚凉,午阳短。 天高云淡,大雁南飞,层林尽染……这些字眼儿都可以形容我北...

网友评论

    本文标题:Android三方应用如何挂断电话

    本文链接:https://www.haomeiwen.com/subject/aokvuxtx.html