2015-01-04 3 views
3

Я пытался получить доступ к некоторым функциям на моем телефоне с двумя SIM-картами Android (марка LKD). Мне удалось получить функции для TelephonyManager и ITelephony через java-отражение и заставил их работать. Однако я хочу получить силу сигнала для обеих сим-карт, и я не вижу способа сделать это через отражение. Я могу получить первую сим-карту в слоте 1 с помощью PhoneStateListener с функцией onSignalStrengthsChanged().Сила сигнала Android с двумя SIM-картами

У кого-нибудь есть советы по этому поводу? Функции я получил от отражения:

###stanard methods:### 
adjustModemRadioPower - boolean: int, int 
adjustModemRadioPowerByBand - boolean: int, int 
btSimapApduRequest - int: int, java.lang.String, android.telephony.BtSimapOperResponse 
btSimapConnectSIM - int: int, android.telephony.BtSimapOperResponse 
btSimapDisconnectSIM - int: 
btSimapPowerOffSIM - int: 
btSimapPowerOnSIM - int: int, android.telephony.BtSimapOperResponse 
btSimapResetSIM - int: int, android.telephony.BtSimapOperResponse 
disableLocationUpdates - void: 
disableLocationUpdatesGemini - void: int 
enableLocationUpdates - void: 
enableLocationUpdatesGemini - void: int 
equals - boolean: java.lang.Object 
from - class android.telephony.TelephonyManager: android.content.Context 
getAllCellInfo - interface java.util.List: 
getCallState - int: 
getCallStateGemini - int: int 
getCdmaEriIconIndex - int: 
getCdmaEriIconMode - int: 
getCdmaEriText - class java.lang.String: 
getCellLocation - class android.telephony.CellLocation: 
getCellLocationGemini - class android.telephony.CellLocation: int 
getClass - class java.lang.Class: 
getCompleteVoiceMailNumber - class java.lang.String: 
getCurrentPhoneType - int: 
getDataActivity - int: 
getDataState - int: 
getDataStateGemini - int: int 
getDefault - class android.telephony.TelephonyManager: 
getDeviceId - class java.lang.String: 
getDeviceIdGemini - class java.lang.String: int 
getDeviceSoftwareVersion - class java.lang.String: 
getIccCardType - class java.lang.String: 
getIccCardTypeGemini - class java.lang.String: int 
getIsimDomain - class java.lang.String: 
getIsimImpi - class java.lang.String: 
getIsimImpu - class [Ljava.lang.String;: 
getLine1AlphaTag - class java.lang.String: 
getLine1AlphaTagGemini - class java.lang.String: int 
getLine1Number - class java.lang.String: 
getLine1NumberGemini - class java.lang.String: int 
getLteOnCdmaMode - int: 
getLteOnCdmaModeStatic - int: 
getMaxPdpNum - int: int 
getMissedCallCount - int: 
getMobileRevisionAndIMEI - void: int, android.os.Message 
getMsisdn - class java.lang.String: 
getNeighboringCellInfo - interface java.util.List: 
getNeighboringCellInfoGemini - interface java.util.List: int 
getNetworkClass - int: int 
getNetworkCountryIso - class java.lang.String: 
getNetworkCountryIsoGemini - class java.lang.String: int 
getNetworkOperator - class java.lang.String: 
getNetworkOperatorGemini - class java.lang.String: int 
getNetworkOperatorName - class java.lang.String: 
getNetworkOperatorNameGemini - class java.lang.String: int 
getNetworkType - int: 
getNetworkTypeGemini - int: int 
getNetworkTypeName - class java.lang.String: 
getNetworkTypeName - class java.lang.String: int 
getNetworkTypeNameGemini - class java.lang.String: int 
getPhoneType - int: 
getPhoneType - int: int 
getPhoneTypeGemini - int: int 
getRadioType - int: int 
getSN - class java.lang.String: 
getSimCountryIso - class java.lang.String: 
getSimCountryIsoGemini - class java.lang.String: int 
getSimOperator - class java.lang.String: 
getSimOperatorGemini - class java.lang.String: int 
getSimOperatorName - class java.lang.String: 
getSimOperatorNameGemini - class java.lang.String: int 
getSimSerialNumber - class java.lang.String: 
getSimSerialNumberGemini - class java.lang.String: int 
getSimState - int: 
getSimStateGemini - int: int 
getSmsDefaultSim - int: 
getSpNameInEfSpn - class java.lang.String: 
getSpNameInEfSpnGemini - class java.lang.String: int 
getSubscriberId - class java.lang.String: 
getSubscriberIdGemini - class java.lang.String: int 
getVoiceMailAlphaTag - class java.lang.String: 
getVoiceMailAlphaTagGemini - class java.lang.String: int 
getVoiceMailNumber - class java.lang.String: 
getVoiceMailNumberGemini - class java.lang.String: int 
getVoiceMessageCount - int: 
getVoiceMessageCountGemini - int: int 
hasIccCard - boolean: 
hasIccCardGemini - boolean: int 
hashCode - int: 
isIccCardProviderAsMvno - boolean: 
isIccCardProviderAsMvnoGemini - boolean: int 
isNetworkRoaming - boolean: 
isNetworkRoamingGemini - boolean: int 
isOperatorMvnoForEfPnn - class java.lang.String: 
isOperatorMvnoForEfPnnGemini - class java.lang.String: int 
isOperatorMvnoForImsi - class java.lang.String: 
isOperatorMvnoForImsiGemini - class java.lang.String: int 
isSmsCapable - boolean: 
isVoiceCapable - boolean: 
listen - void: android.telephony.PhoneStateListener, int 
listenGemini - void: android.telephony.PhoneStateListener, int, int 
notify - void: 
notifyAll - void: 
simAuth - class java.lang.String: java.lang.String 
simAuthGemini - class java.lang.String: java.lang.String, int 
toString - class java.lang.String: 
uSimAuth - class java.lang.String: java.lang.String, java.lang.String 
uSimAuthGemini - class java.lang.String: java.lang.String, java.lang.String, int 
wait - void: 
wait - void: long 
wait - void: long, int 

###declared methods### 
adjustModemRadioPower - boolean: int, int 
adjustModemRadioPowerByBand - boolean: int, int 
btSimapApduRequest - int: int, java.lang.String, android.telephony.BtSimapOperResponse 
btSimapConnectSIM - int: int, android.telephony.BtSimapOperResponse 
btSimapDisconnectSIM - int: 
btSimapPowerOffSIM - int: 
btSimapPowerOnSIM - int: int, android.telephony.BtSimapOperResponse 
btSimapResetSIM - int: int, android.telephony.BtSimapOperResponse 
disableLocationUpdates - void: 
disableLocationUpdatesGemini - void: int 
enableLocationUpdates - void: 
enableLocationUpdatesGemini - void: int 
getAllCellInfo - interface java.util.List: 
getCallState - int: 
getCallStateGemini - int: int 
getCdmaEriIconIndex - int: 
getCdmaEriIconMode - int: 
getCdmaEriText - class java.lang.String: 
getCellLocation - class android.telephony.CellLocation: 
getCellLocationGemini - class android.telephony.CellLocation: int 
getCompleteVoiceMailNumber - class java.lang.String: 
getCurrentPhoneType - int: 
getDataActivity - int: 
getDataState - int: 
getDataStateGemini - int: int 
getDeviceId - class java.lang.String: 
getDeviceIdGemini - class java.lang.String: int 
getDeviceSoftwareVersion - class java.lang.String: 
getIccCardType - class java.lang.String: 
getIccCardTypeGemini - class java.lang.String: int 
getIsimDomain - class java.lang.String: 
getIsimImpi - class java.lang.String: 
getIsimImpu - class [Ljava.lang.String;: 
getLine1AlphaTag - class java.lang.String: 
getLine1AlphaTagGemini - class java.lang.String: int 
getLine1Number - class java.lang.String: 
getLine1NumberGemini - class java.lang.String: int 
getLteOnCdmaMode - int: 
getMissedCallCount - int: 
getMobileRevisionAndIMEI - void: int, android.os.Message 
getMsisdn - class java.lang.String: 
getNeighboringCellInfo - interface java.util.List: 
getNeighboringCellInfoGemini - interface java.util.List: int 
getNetworkCountryIso - class java.lang.String: 
getNetworkCountryIsoGemini - class java.lang.String: int 
getNetworkOperator - class java.lang.String: 
getNetworkOperatorGemini - class java.lang.String: int 
getNetworkOperatorName - class java.lang.String: 
getNetworkOperatorNameGemini - class java.lang.String: int 
getNetworkType - int: 
getNetworkTypeGemini - int: int 
getNetworkTypeName - class java.lang.String: 
getNetworkTypeNameGemini - class java.lang.String: int 
getPhoneType - int: 
getPhoneTypeGemini - int: int 
getSN - class java.lang.String: 
getSimCountryIso - class java.lang.String: 
getSimCountryIsoGemini - class java.lang.String: int 
getSimOperator - class java.lang.String: 
getSimOperatorGemini - class java.lang.String: int 
getSimOperatorName - class java.lang.String: 
getSimOperatorNameGemini - class java.lang.String: int 
getSimSerialNumber - class java.lang.String: 
getSimSerialNumberGemini - class java.lang.String: int 
getSimState - int: 
getSimStateGemini - int: int 
getSmsDefaultSim - int: 
getSpNameInEfSpn - class java.lang.String: 
getSpNameInEfSpnGemini - class java.lang.String: int 
getSubscriberId - class java.lang.String: 
getSubscriberIdGemini - class java.lang.String: int 
getVoiceMailAlphaTag - class java.lang.String: 
getVoiceMailAlphaTagGemini - class java.lang.String: int 
getVoiceMailNumber - class java.lang.String: 
getVoiceMailNumberGemini - class java.lang.String: int 
getVoiceMessageCount - int: 
getVoiceMessageCountGemini - int: int 
hasIccCard - boolean: 
hasIccCardGemini - boolean: int 
isIccCardProviderAsMvno - boolean: 
isIccCardProviderAsMvnoGemini - boolean: int 
isNetworkRoaming - boolean: 
isNetworkRoamingGemini - boolean: int 
isOperatorMvnoForEfPnn - class java.lang.String: 
isOperatorMvnoForEfPnnGemini - class java.lang.String: int 
isOperatorMvnoForImsi - class java.lang.String: 
isOperatorMvnoForImsiGemini - class java.lang.String: int 
isSmsCapable - boolean: 
isVoiceCapable - boolean: 
listen - void: android.telephony.PhoneStateListener, int 
listenGemini - void: android.telephony.PhoneStateListener, int, int 
simAuth - class java.lang.String: java.lang.String 
simAuthGemini - class java.lang.String: java.lang.String, int 
uSimAuth - class java.lang.String: java.lang.String, java.lang.String 
uSimAuthGemini - class java.lang.String: java.lang.String, java.lang.String, int 
from - class android.telephony.TelephonyManager: android.content.Context 
getDefault - class android.telephony.TelephonyManager: 
getDefaultSim - int: 
getITelephony - interface com.android.internal.telephony.ITelephony: 
getLteOnCdmaModeStatic - int: 
getMaxPdpNum - int: int 
getNetworkClass - int: int 
getNetworkTypeName - class java.lang.String: int 
getPhoneType - int: int 
getPhoneTypeFromNetworkType - int: 
getPhoneTypeFromProperty - int: 
getProcCmdLine - class java.lang.String: 
getRadioType - int: int 
getSubscriberInfo - interface com.android.internal.telephony.IPhoneSubInfo: 
getSubscriberInfo - interface com.android.internal.telephony.IPhoneSubInfo: int 

###ITelephony methods### 
adjustModemRadioPower - boolean: int, int 
adjustModemRadioPowerByBand - boolean: int, int, int 
answerRingingCall - void: 
answerRingingCallGemini - void: int 
aquire3GSwitchLock - int: 
asBinder - interface android.os.IBinder: 
btSimapApduRequest - int: int, java.lang.String, android.telephony.BtSimapOperResponse 
btSimapConnectSIM - int: int, android.telephony.BtSimapOperResponse 
btSimapDisconnectSIM - int: 
btSimapPowerOffSIM - int: 
btSimapPowerOnSIM - int: int, android.telephony.BtSimapOperResponse 
btSimapResetSIM - int: int, android.telephony.BtSimapOperResponse 
call - void: java.lang.String 
callGemini - void: java.lang.String, int 
cancelMissedCallsNotification - void: 
cancelMissedCallsNotificationGemini - void: int 
cleanupApnTypeGemini - int: java.lang.String, int 
closeIccLogicalChannel - boolean: int 
closeIccLogicalChannelGemini - boolean: int, int 
dial - void: java.lang.String 
dialGemini - void: java.lang.String, int 
disableApnType - int: java.lang.String 
disableApnTypeGemini - int: java.lang.String, int 
disableDataConnectivity - boolean: 
disableDataConnectivityGemini - int: int 
disableLocationUpdates - void: 
disableLocationUpdatesGemini - void: int 
enableApnType - int: java.lang.String 
enableApnTypeGemini - int: java.lang.String, int 
enableDataConnectivity - boolean: 
enableDataConnectivityGemini - int: int 
enableLocationUpdates - void: 
enableLocationUpdatesGemini - void: int 
endCall - boolean: 
endCallGemini - boolean: int 
equals - boolean: java.lang.Object 
get3GCapabilitySIM - int: 
get3GSwitchAllowed3GSlots - int: 
getActivePhoneType - int: 
getActivePhoneTypeGemini - int: int 
getAdnStorageInfo - class [I: int 
getAllCellInfo - interface java.util.List: 
getCallState - int: 
getCallStateGemini - int: int 
getCdmaEriIconIndex - int: 
getCdmaEriIconMode - int: 
getCdmaEriText - class java.lang.String: 
getCellLocation - class android.os.Bundle: 
getCellLocationGemini - class android.os.Bundle: int 
getClass - class java.lang.Class: 
getDataActivity - int: 
getDataActivityGemini - int: int 
getDataState - int: 
getDataStateGemini - int: int 
getGateway - class java.lang.String: java.lang.String 
getGatewayGemini - class java.lang.String: java.lang.String, int 
getIccATR - class java.lang.String: 
getIccATRGemini - class java.lang.String: int 
getIccCardType - class java.lang.String: 
getIccCardTypeGemini - class java.lang.String: int 
getInterfaceDescriptor - class java.lang.String: 
getInterfaceName - class java.lang.String: java.lang.String 
getInterfaceNameGemini - class java.lang.String: java.lang.String, int 
getIpAddress - class java.lang.String: java.lang.String 
getIpAddressGemini - class java.lang.String: java.lang.String, int 
getLastError - int: 
getLastErrorGemini - int: int 
getLine1AlphaTag - class java.lang.String: int 
getLine1Number - class java.lang.String: int 
getLteOnCdmaMode - int: 
getMissedCallCount - int: 
getMobileRevisionAndIMEI - void: int, android.os.Message 
getNeighboringCellInfo - interface java.util.List: 
getNeighboringCellInfoGemini - interface java.util.List: int 
getNetworkCountryIsoGemini - class java.lang.String: int 
getNetworkOperatorGemini - class java.lang.String: int 
getNetworkOperatorNameGemini - class java.lang.String: int 
getNetworkType - int: 
getNetworkTypeGemini - int: int 
getPendingMmiCodesGemini - int: int 
getPreciseCallState - int: 
getSN - class java.lang.String: 
getScAddressGemini - class java.lang.String: int 
getServiceState - class android.os.Bundle: 
getServiceStateGemini - class android.os.Bundle: int 
getSimCountryIso - class java.lang.String: int 
getSimIndicatorState - int: 
getSimIndicatorStateGemini - int: int 
getSimOperator - class java.lang.String: int 
getSimOperatorName - class java.lang.String: int 
getSimSerialNumber - class java.lang.String: int 
getSimState - int: int 
getSmsDefaultSim - int: 
getSpNameInEfSpn - class java.lang.String: 
getSpNameInEfSpnGemini - class java.lang.String: int 
getSubscriberId - class java.lang.String: int 
getSubscriberInfo - interface com.android.internal.telephony.IPhoneSubInfo: int 
getVoiceMailAlphaTag - class java.lang.String: int 
getVoiceMailNumber - class java.lang.String: int 
getVoiceMessageCount - int: 
getVoiceMessageCountGemini - int: int 
handlePinMmi - boolean: java.lang.String 
handlePinMmiGemini - boolean: java.lang.String, int 
hasIccCard - boolean: 
hasIccCardGemini - boolean: int 
hashCode - int: 
is3GSwitchLocked - boolean: 
is3GSwitchManualChange3GAllowed - boolean: 
is3GSwitchManualEnabled - boolean: 
isDataConnectivityPossible - boolean: 
isDataConnectivityPossibleGemini - boolean: int 
isFDNEnabled - boolean: 
isFDNEnabledGemini - boolean: int 
isIccCardProviderAsMvno - boolean: 
isIccCardProviderAsMvnoGemini - boolean: int 
isIdle - boolean: 
isIdleGemini - boolean: int 
isNetworkRoamingGemini - boolean: int 
isOffhook - boolean: 
isOffhookGemini - boolean: int 
isOperatorMvnoForEfPnn - class java.lang.String: 
isOperatorMvnoForEfPnnGemini - class java.lang.String: int 
isOperatorMvnoForImsi - class java.lang.String: 
isOperatorMvnoForImsiGemini - class java.lang.String: int 
isPhbReady - boolean: 
isPhbReadyGemini - boolean: int 
isRadioOn - boolean: 
isRadioOnGemini - boolean: int 
isRinging - boolean: 
isRingingGemini - boolean: int 
isSimInsert - boolean: int 
isSimPinEnabled - boolean: 
isTestIccCard - boolean: 
isTestIccCardGemini - boolean: int 
isVTIdle - boolean: 
isVoiceIdle - boolean: 
needsOtaServiceProvisioning - boolean: 
notify - void: 
notifyAll - void: 
openIccLogicalChannel - int: java.lang.String 
openIccLogicalChannelGemini - int: java.lang.String, int 
openIccLogicalChannelWithSw - class [B: java.lang.String 
openIccLogicalChannelWithSwGemini - class [B: java.lang.String, int 
registerForSimModeChange - void: android.os.IBinder, int 
release3GSwitchLock - boolean: int 
set3GCapabilitySIM - boolean: int 
setDataRoamingEnabledGemini - void: boolean, int 
setDefaultPhone - void: int 
setGprsConnType - void: int, int 
setGprsTransferType - void: int 
setGprsTransferTypeGemini - void: int, int 
setRadio - boolean: boolean 
setRadioOff - boolean: 
setRoamingIndicatorNeddedProperty - void: boolean, boolean 
setScAddressGemini - void: java.lang.String, int 
showCallScreen - boolean: 
showCallScreenGemini - boolean: int 
showCallScreenWithDialpad - boolean: boolean 
showCallScreenWithDialpadGemini - boolean: boolean, int 
silenceRinger - void: 
silenceRingerGemini - void: int 
simAuth - class java.lang.String: java.lang.String 
simAuthGemini - class java.lang.String: java.lang.String, int 
supplyPin - boolean: java.lang.String 
supplyPinGemini - boolean: java.lang.String, int 
supplyPuk - boolean: java.lang.String, java.lang.String 
supplyPukGemini - boolean: java.lang.String, java.lang.String, int 
toString - class java.lang.String: 
toggleRadioOnOff - void: 
transmitIccBasicChannel - class java.lang.String: int, int, int, int, int, java.lang.String 
transmitIccBasicChannelGemini - class java.lang.String: int, int, int, int, int, java.lang.String, int 
transmitIccLogicalChannel - class java.lang.String: int, int, int, int, int, int, java.lang.String 
transmitIccLogicalChannelGemini - class java.lang.String: int, int, int, int, int, int, java.lang.String, int 
transmitIccSimIO - class [B: int, int, int, int, int, java.lang.String 
transmitIccSimIOGemini - class [B: int, int, int, int, int, java.lang.String, int 
uSimAuth - class java.lang.String: java.lang.String, java.lang.String 
uSimAuthGemini - class java.lang.String: java.lang.String, java.lang.String, int 
unregisterForSimModeChange - void: android.os.IBinder 
updateServiceLocation - void: 
updateServiceLocationGemini - void: int 
wait - void: 
wait - void: long 
wait - void: long, int 

И кстати, кажется, обе сим-карты активны одновременно (нет необходимости переключения между сим-картами), так как я могу позвонить по телефону, используя как телефонные номера без переключения сим-карту по телефону.

Спасибо!

ответ

2

Спасибо за ответ! Я не пробовал ваше решение, но я нашел свое собственное решение, которое сработало.

Можно использовать другой конструктор для TelephonyManager, где вы можете передать в слот сим-карты вы хотите контролировать:

MultiSimClass = Class.forName("android.telephony.MultiSimTelephonyManager"); 

    for (Constructor<?> constructor : MultiSimClass.getConstructors()){ 
     if (constructor.getParameterTypes().length == 2){ 
       try { 
        multiSimTelephonyManager1 = constructor.newInstance(context,0); 
        multiSimTelephonyManager2 = constructor.newInstance(context,1); 
      } 
     } 
    } 
+0

Здравствуйте, roger, у вас есть информация о SIM-карте на телефоне с двумя SIM-картами, используя приведенный выше фрагмент кода? Каков тип MultiSimClass, multiSimTelephonyManager1, multiSimTelephonyManager2 ?? –

+1

Привет! Вышеприведенный фрагмент дает вам список конструкторов для класса MultiSimTelephonyManager. Чтобы получить другие методы, вы можете сделать что-то вроде: for (Метод метода: MultiSimClass.getMethods()) { System.out.println ("имя метода:" + method.getName()); } И чтобы получить список типов параметров в методе, вы можете сделать метод method.getParameterTypes() или getReturnType() для возвращаемого типа метода. MultiSimClass имеет тип Class и multiSimTelephonyManager объекта. –

+0

Неужели вы пытаетесь получить двойные имена слотов/операторов/IMSI/MSISDN на любом Android-телефоне Android? –

1

Для этой конкретной версии TelephonyManager, вместо того, чтобы использовать

TelephonyManager.listen (phoneStateListener, state)

который прослушивает только по умолчанию SIM, вы можете попробовать использовать 2 экземпляра вашего PhoneStateListener и вызовите

TelephonyManager.listenGemini (phoneStateListener1, state, 0) для 1-я SIM-карта и

TelephonyManager.listenGemini (phoneStateListener2, state, 1) для 2-й SIM-карты,

, где третий параметр для listenGemini - номер SIM-карты.

+0

где находится «listenGemini» из? – danijax

+0

«listenGemini» - это имя внутреннего метода в конкретной реализации TelephonyManager устройства для поддержки двух сим-телефонов - см. Список методов из вопроса, полученного путем отражения. Такой интерфейс должен быть в значительной степени устаревшим, как в 2017 году, поскольку современный Android поддерживает двойную симметрию. – headuck

Смежные вопросы