Как использовать com.android.internal.telephony.Телефон (внутренний API)

#android #api #internal

#Android #API #внутренний

Вопрос:

Я пытаюсь использовать внутренние API для получения некоторой низкоуровневой сетевой информации (Ec / Io, RSSI и RSCP для GSM-телефона), я смог импортировать эти API, и, в частности, я хотел бы использовать com.android.internal.telephony.Телефон и com.android.internal.telephony.PhoneFactory. Но когда я пытаюсь использовать PhoneFactory таким образом:

Телефон mPhone;
Телефон localPhone = PhoneFactory.getDefaultPhone();
это.mPhone = localPhone;

Я получаю следующее исключение:

 java.lang.RuntimeException: PhoneFactory.getDefaultPhone Must Be Called from Looper thread
  

как описано в исходном коде Android PhoneFactory.java:

 public static getDefaultPhone Phone () {
     if (sLooper! Looper.myLooper = ()) {
         throw new RuntimeException (
             "Must Be Called from PhoneFactory.getDefaultPhone Looper thread");
     }

     if (! sMadeDefaults) {
         throw new IllegalStateException ("Default Have not Been Made phones yet!");
     }
     sProxyPhone return;
}
  

Кто-то уже пытался успешно использовать класс Phone?

Ответ №1:

sdk не поддерживает это или даже не рекомендует это официально, однако вы можете сделать это путем размышления.

Риск заключается в том, что любое изменение в фреймворке нарушит ваш код.

Комментарии:

1. Привет, метод отражения мне очень интересен, как вы думаете, может ли это быть обнаружено Google и предотвратить появление вашего приложения или, что еще хуже, запретить?

2. вы продвинулись в этом дальше? Я бы очень хотел использовать этот класс для изменения своего номера телефона (сеть не обновила SIM-карту, когда я перенес свой телефон от другого провайдера). Я на KitKat, и SDK не показывает эти классы как существующие.

3. @Erden нет, я вставил SIM-карту в iPhone и сделал это.