end incoming call programmatically end incoming call programmatically android android

end incoming call programmatically


Try this Sure it will work. It's working fine for me.

You could download the ITelephony.java file from ITelephony.java

After that you add the method to end call:

Function to Disconnect call

public void disconnectCall(){ try {    String serviceManagerName = "android.os.ServiceManager";    String serviceManagerNativeName = "android.os.ServiceManagerNative";    String telephonyName = "com.android.internal.telephony.ITelephony";    Class<?> telephonyClass;    Class<?> telephonyStubClass;    Class<?> serviceManagerClass;    Class<?> serviceManagerNativeClass;    Method telephonyEndCall;    Object telephonyObject;    Object serviceManagerObject;    telephonyClass = Class.forName(telephonyName);    telephonyStubClass = telephonyClass.getClasses()[0];    serviceManagerClass = Class.forName(serviceManagerName);    serviceManagerNativeClass = Class.forName(serviceManagerNativeName);    Method getService = // getDefaults[29];    serviceManagerClass.getMethod("getService", String.class);    Method tempInterfaceMethod = serviceManagerNativeClass.getMethod("asInterface", IBinder.class);    Binder tmpBinder = new Binder();    tmpBinder.attachInterface(null, "fake");    serviceManagerObject = tempInterfaceMethod.invoke(null, tmpBinder);    IBinder retbinder = (IBinder) getService.invoke(serviceManagerObject, "phone");    Method serviceMethod = telephonyStubClass.getMethod("asInterface", IBinder.class);    telephonyObject = serviceMethod.invoke(null, retbinder);    telephonyEndCall = telephonyClass.getMethod("endCall");    telephonyEndCall.invoke(telephonyObject);  } catch (Exception e) {    e.printStackTrace();    Log.error(DialerActivity.this,            "FATAL ERROR: could not connect to telephony subsystem");    Log.error(DialerActivity.this, "Exception object: " + e);  }}


Try this function:

 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);        }    }


In your Application create a package (com.android.internal.telephony) in java folder. And then copy ITelephone interface in that package

ITelephone interface source: http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/com/android/internal/telephony/ITelephony.java/?v=source

Code for Disconnect Call:

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) {}

Also add permissions for using this methods:

<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" />