2017-06-20 102 views
1

我试图断开呼入来电,但面对这个错误如何终止内ITelephony

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) 
+0

检查导入的文件包名称和你的。 – RameshJaga

+0

打包名称正确 – Hami

+0

看看您是否在项目中添加了ITelephony.AIDL文件?如果你已经添加,那么你的包名必须包名称必须是COM /安卓/内部/电话/ ITelephony.AIDL – RameshJaga

回答

0

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

你要添加的文件这样

enter image description here

然后还你的包名称必须是COM /安卓/内部/电话/ ITelephony.AIDL:

检查这个tutorial实现AIDL文件

+0

现在不能正常工作它在代码中给它错误电话号码 – Hami

+0

更新您实施的代码以及日志猫报告。所以我可以检查。 – RameshJaga

+0

它给它错误的电话,无法解决变量 – Hami

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

因为m.invoke(telephony)不返回这是不可能的一个ITelephony的子类,也不ITelephony本身,所以你不能施放它。

正如你可以看到m.invoke(telephony)回报ITelephoneycom.android.internal.telephony包, 但你在belllab.com.meetingmanager包使用ITelephoney

+0

那么我怎么可以断开来电 – Hami

+0

我已经使用堆栈溢出的代码。是否有另一种方法来断开来电 – Hami

+0

我认为你在这里使用两个不同的类。 – creativecreatorormaybenot