Я увидел несколько сообщений SO, в которых обсуждалось, как программировать телефонный вызов, например этот. Да, люди сосредотачиваются на результате, но никто не объясняет причины почему он работает?
Я пробовал код, он работает хорошо. Но я хотел бы узнать подробности о том, что происходит внизу? Почему при создании ITelephony.aidl в нашем проекте отображается скрытый внутренний интерфейс ITelephony
. Каким образом мы создали ITelephony.aidl и автоматически сгенерированную ссылку java (/gen/ITelephony.java) на android ITelephony
интерфейс? Это связано только с совпадением имени (имя пакета и имя файла helpl)?
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
//Why does the android internal ITelephony interface is exposed after created the ITelephony.aidl?
com.android.internal.telephony.ITelephony telephonyService = (ITelephony) m.invoke(tm);
telephonyService.endCall();