Как я могу получить доступ к частным API Android, которые не отображаются в TelephonyManager? - PullRequest
4 голосов
/ 06 мая 2010

Я намереваюсь написать тесты, связанные с записью на телефон и прямую SIM-карту.

Каковы альтернативы в случае, если требуемые API не представлены в TelephonyManager, но существуют как частные API в PhoneBase.java, PhoneFactory.java или CommandInterface.java?

В частности, мои вопросы:

  1. Что такое «замена» для: PhoneFactory.getDefaultPhone()?
  2. Какая альтернатива для доступа к CommandsInterface (например: CommandsInterface mCmdIf = ((PhoneBase)mPhone).mCM)?

Заранее спасибо,
Миха

1 Ответ

6 голосов
/ 26 августа 2011

Вы можете использовать java reflection.

Вот как я получил доступ к методам класса com.android.internal.telephony.ITelephony, чтобы заблокировать входящий вызов ...

private void endCall() throws Exception {
      TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

      Class<?> c = Class.forName(tm.getClass().getName());
      Method m = c.getDeclaredMethod("getITelephony");
      m.setAccessible(true);
      ITelephony telephonyService = (ITelephony) m.invoke(tm);

      telephonyService.silenceRinger();
      telephonyService.endCall();
      Toast.makeText(context, "Call Ended !", Toast.LENGTH_SHORT).show();
}
...