How to import com.android.internal.telephony.ITelephony to the Android application
The ITelephony
interface is internal, so you cannot get a standard reference to it. You could use reflection all the way, i.e.
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
Method m1 = tm.getClass().getDeclaredMethod("getITelephony");
m1.setAccessible(true);
Object iTelephony = m1.invoke(tm);
Method m2 = iTelephony.getClass().getDeclaredMethod("silenceRinger");
Method m3 = iTelephony.getClass().getDeclaredMethod("endCall");
m2.invoke(iTelephony);
m3.invoke(iTelephony);
But either way those methods need the MODIFY_PHONE_STATE
permission, which can only be granted to system apps. So I'm afraid it won't work anyway.
For kotlin:
val tm = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val m1 = tm::class.java.getDeclaredMethod("getITelephony")
m1.setAccessible(true)
val telephonyService = m1.invoke(tm)
val m2 = telephonyService::class.java.getDeclaredMethod("silenceRinger")
val m3 = telephonyService::class.java.getDeclaredMethod("endCall")
m2.invoke(telephonyService)
m3.invoke(telephonyService)
For Android API 28 and above you can use the following code
TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ANSWER_PHONE_CALLS) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
telecomManager.endCall();
}
}else{
//Ask for permission here
}
Also add this permission in your app manifest file
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />