Здравствуйте, требуется помощь профессионала, так как эта задача чрезвычайно сложна.
Пытаюсь создать экземпляр класса com.android.internal.telephony.RIL
. Закрытый API я добавил и все сделал правильно - фреймворк модема пропустил через dex2jar и добавил в используемые классы. Также открыл jar
в jd-gui
. Кстати, скорее всего фреймворк был модифицирован производетелем - Micromax
. Вызвал статический метод TelephonyDevController.getModemCount()
и получил возвращаемое значение - все работает. Вообще задача следующая:
Существует интерфейс com.android.internal.telephony.IccCard
с методом boolean getIccLockEnabled()
. Существует класс, его реализующий - com.android.internal.telephony.uicc.IccCardProxy
. Я хочу вызвать его метод getIccLockEnabled
. Чтобы создать экземпляр этого классa, в его конструктор требуется передать параметры android.content.Context
, com.android.internal.telephony.CommandsInterface
и int
. Второй параметр является интерфейсом, а значит можно передать его сабкласс, а именно, com.android.internal.telephony.RIL
. Чтобы создать экземпляр RIL
, в его конструктор требуется передать контекст и два int
. Но вот при создании RIL
-а приложение вылетает с логом TelephonyDevController not yet created!?!
.
Вот конструктор классa RIL
public RIL(Context paramContext, int paramInt1, int paramInt2, Integer paramInteger)
{
super(paramContext);
riljLog("RIL(context, preferredNetworkType=" + paramInt1 + " cdmaSubscription=" + paramInt2 + ")");
this.mContext = paramContext;
this.mCdmaSubscription = paramInt2;
this.mPreferredNetworkType = paramInt1;
this.mPhoneType = 0;
this.mInstanceId = paramInteger;
this.mWakeLock = ((PowerManager)paramContext.getSystemService("power")).newWakeLock(1, "RILJ");
this.mWakeLock.setReferenceCounted(false);
this.mWakeLockTimeout = SystemProperties.getInt("ro.ril.wake_lock_timeout", 60000);
this.mWakeLockCount = 0;
this.mSenderThread = new HandlerThread("RILSender" + this.mInstanceId);
this.mSenderThread.start();
this.mSender = new RILSender(this.mSenderThread.getLooper());
if (!((ConnectivityManager)paramContext.getSystemService("connectivity")).isNetworkSupported(0)) {
riljLog("Not starting RILReceiver: wifi-only");
}
for (;;)
{
TelephonyDevController.getInstance();
TelephonyDevController.registerRIL(this);
return;
riljLog("Starting RILReceiver" + this.mInstanceId);
this.mReceiver = createRILReceiver();
this.mReceiverThread = new Thread(this.mReceiver, "RILReceiver" + this.mInstanceId);
this.mReceiverThread.start();
paramContext = (DisplayManager)paramContext.getSystemService("display");
this.mDefaultDisplay = paramContext.getDisplay(0);
paramContext.registerDisplayListener(this.mDisplayListener, null);
}
}
И методы класса TelephonyDevController
- create()
и getInstance()
public static TelephonyDevController create()
{
synchronized (mLock)
{
if (sTelephonyDevController != null) {
throw new RuntimeException("TelephonyDevController already created!?!");
}
}
sTelephonyDevController = new TelephonyDevController();
TelephonyDevController localTelephonyDevController = sTelephonyDevController;
return localTelephonyDevController;
}
public static TelephonyDevController getInstance()
{
synchronized (mLock)
{
if (sTelephonyDevController == null) {
throw new RuntimeException("TelephonyDevController not yet created!?!");
}
}
TelephonyDevController localTelephonyDevController = sTelephonyDevController;
return localTelephonyDevController;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как узнать установлен ли на телефоне WhatsApp не вызывая startActivity?
Разбирался я тут со строками и на одном ресурсе прочитал следующий тезис:
Приветствую, собственно в чем моя проблемаНикак не могу адекватно заставить работать Hibernate