如何终止ITelephony内的来电

时间:2017-06-20 10:46:24

标签: android telephony telephonymanager

我正在尝试断开来电,但面临此错误

 public interface ITelephony {
    boolean endCall();
    void answerRingingCall();
    void silenceRinger();
 }
 private void disconnectPhoneItelephony(Context context)
 {
    ITelephony telephonyService;
    TelephonyManager telephony = (TelephonyManager)
            context.getSystemService(Context.TELEPHONY_SERVICE);
    try
    {
    telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        Class<?> c = Class.forName(telephony.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
         telephonyService = (ITelephony) m.invoke(telephony);
        telephonyService.endCall();
    }
    catch (Exception e)
    {
        e.printStackTrace();
        Log.d("error", e.toString());
    }
} 

错误:

(java.lang.ClassCastException:com.android.internal.telephony.ITelephony$Stub$
Proxy cannot be cast to belllab.com.meetingmanager.ITelephony )

2 个答案:

答案 0 :(得分:0)

telephonyService = (ITelephony) m.invoke(telephony);

这是不可能的,因为m.invoke(telephony)本身不会返回ITelephonyITelephony的子类,因此您无法投射它。

您可以看到m.invoke(telephony)ITelephoney包中返回com.android.internal.telephony,  但您在ITelephoney包中使用belllab.com.meetingmanager

答案 1 :(得分:0)

如果您在项目中添加了ITelephony.AIDL文件?如果没有从here下载并将其添加到您的项目中。

你必须像这样添加文件

enter image description here

此外,您的包名必须是com / android / internal / telephony / ITelephony.AIDL:

选中此tutorial以实施Aidl文件