Android 以编程方式结束传入呼叫

Android 以编程方式结束传入呼叫,android,telephony,telephonymanager,Android,Telephony,Telephonymanager,这在SO中是一个熟悉的问题。我需要的是 以编程方式结束调用。 我找了很多 及 还有更多的问题,答案和建议 所有人都说使用ITelephonyService.aidl与 该解决方案在许多设备上都能完美运行,但在三星Duos上却无法运行。我挣扎了一个多星期,但没有找到解决办法。。 在这种类型的设备上有什么特殊的API可以使用吗?如何拒绝来电?请帮帮我…试试这个,确保它能用。这对我来说很好 您可以从以下位置下载ITelephony.java文件: 之后,将方法添加到结束调用: 断开呼叫的

这在SO中是一个熟悉的问题。我需要的是 以编程方式结束调用。 我找了很多

还有更多的问题,答案和建议

所有人都说使用
ITelephonyService.aidl

该解决方案在许多设备上都能完美运行,但在三星Duos上却无法运行。我挣扎了一个多星期,但没有找到解决办法。。
在这种类型的设备上有什么特殊的API可以使用吗?如何拒绝来电?请帮帮我…

试试这个,确保它能用。这对我来说很好

您可以从以下位置下载ITelephony.java文件:

之后,将方法添加到结束调用:

断开呼叫的功能
public void disconnectCall(){
试一试{
字符串serviceManagerName=“android.os.ServiceManager”;
字符串serviceManagerNativeName=“android.os.ServiceManagerActive”;
String telephonyName=“com.android.internal.telephony.ITelephony”;
类电话类;
类电话子类;
类serviceManagerClass;
类serviceManagerNativeClass;
方法电话呼叫;
对象电话对象;
对象服务管理对象;
telephonyClass=Class.forName(telephonyName);
TelephonySubclass=telephonyClass.getClasses()[0];
serviceManagerClass=Class.forName(serviceManagerName);
serviceManagerNativeClass=Class.forName(serviceManagerNativeName);
方法getService=//getDefaults[29];
serviceManagerClass.getMethod(“getService”,String.class);
方法tempInterfaceMethod=ServiceManagerActiveClass.getMethod(“asInterface”,IBinder.class);
活页夹tmpBinder=新活页夹();
tmpBinder.attachInterface(空,“假”);
serviceManagerObject=tempInterfaceMethod.invoke(null,tmpBinder);
IBinder retbinder=(IBinder)getService.invoke(serviceManagerObject,“电话”);
方法serviceMethod=telephonyStubClass.getMethod(“asInterface”,IBinder.class);
telephonyObject=serviceMethod.invoke(null,retbinder);
telephonyEndCall=telephonyClass.getMethod(“endCall”);
调用(telephonyObject);
}捕获(例外e){
e、 printStackTrace();
Log.error(DialerActivity.this,
“致命错误:无法连接到电话子系统”);
Log.error(DialerActivity.this,“异常对象:”+e);
}
}
尝试此功能:

 private void endCall() {
        Context context = getApplicationContext();
        try {
            TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            Class<?> c = Class.forName(telephony.getClass().getName());

            Method m = c.getDeclaredMethod("getITelephony");
            m.setAccessible(true);

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

            // Funciona en 2.2
            // Funciona en 2.3.3
            telephonyService.endCall();

            logManager.debug("ITelepony was used (endCall)");
        } catch (Exception e) {
            logManager.error("Error ending call: " + e.getMessage());
            logManager.debug("Error ending call", e);
        }
    }
private void endCall(){
Context=getApplicationContext();
试一试{
TelephonyManager telephony=(TelephonyManager)context.getSystemService(context.telephony_服务);
Class c=Class.forName(telephony.getClass().getName());
方法m=c.getDeclaredMethod(“getITelephony”);
m、 setAccessible(true);
ITelephony电话服务=(ITelephony)m.invoke(电话);
//功能en 2.2
//功能en 2.3.3
telephonyService.endCall();
调试(“使用了ITelepony(endCall)”;
}捕获(例外e){
logManager.error(“结束调用时出错:”+e.getMessage());
调试(“错误结束调用”,e);
}
}

在应用程序中,在java文件夹中创建一个包(com.android.internal.telephony)。然后将ITelephone接口复制到该包中

ITelephone接口源:

断开呼叫的代码:

Context context = getApplicationContext();
try {
    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    Class<?> c = Class.forName(telephony.getClass().getName());
    Method m = c.getDeclaredMethod("getITelephony");
    m.setAccessible(true);
    ITelephony telephonyService = (ITelephony) m.invoke(telephony);
    telephonyService.answerRingingCall();
} catch (Exception e) {
}
Context-Context=getApplicationContext();
试一试{
TelephonyManager telephony=(TelephonyManager)context.getSystemService(context.telephony_服务);
Class c=Class.forName(telephony.getClass().getName());
方法m=c.getDeclaredMethod(“getITelephony”);
m、 setAccessible(true);
ITelephony电话服务=(ITelephony)m.invoke(电话);
电话服务。应答呼叫();
}捕获(例外e){
}
还可以添加使用此方法的权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />


太棒了,工作起来很有魅力!你为我节省了很多时间,我很困惑,为什么这篇文章的Votes那么少,你能在那里发现什么样的例外?你试过在不同类型的设备上工作吗?事实上我想知道异常是否与反射或系统服务有关?@GokulJai,请告诉我它是否会给你带来任何错误?。杰巴:所以,我的问题是——哪个电话会断开,是唯一的来电还是其他的。如,当另一个呼叫正在进行时,如果传入呼叫同时开始响铃。打这个电话会怎么样?
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />