Android--通过AIDL+反射,调用android内部隐藏的服务实现挂断电话

简介:
- 1.AIDL(Android Interface Definition Language) 是Android四大组件中Service下实现应用程序进程之间通信的方式之一;
- 2.调用系统服务挂电话步骤:

步骤一:准备aidl文件

—-1.在你Android工程下面的src目录下新建一个包,包名有要求,要写成com.android.internal.telephony

—-2.在上面创建好的包中新建一个文件,取名ITelephony.aidl;

—-3.在步骤2中的aidl文件中写如下代码:

package com.android.internal.telephony;
interface ITelephony{
    boolean endCall();//挂断电话
    void answerRingingCall();
}

—-4. Build -> Rebuild project.(有的编译工具写完aidl文件会报错,就需要Rebuild一下;

步骤二:通过反射得到ITelephony类,调用endCall()挂电话

—-1.反射代码:

Class managerClass = TelephonyManager.class;//得到TelephonyManager的Class对象
        try {
            //得到挂断电话的方法
            Method getITelephony = managerClass.getDeclaredMethod("getITelephony", (Class[]) null);
            //打开权限
            getITelephony.setAccessible(true);
            //得到TelephonyManager对象
            TelephonyManager manager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
            //得到ITelephony对象,进行所需要的操作
            ITelephony iTelephony = (ITelephony) getITelephony.invoke(manager, (Object[]) null);
            try {
                //**调用挂断电话的 方法**
                iTelephony.endCall();
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
            e.printStackTrace();
        }

你可能感兴趣的:(android)