Signal Strength Android Dual SIM
I am trying to access some functionality on my dual SIM Android phone (LKD brand). I managed to get the functions for TelephonyManager and ITelephony via java reflection and got them working. However, I want to get the signal strength for both sim cards and I don't see a way to do this through reflection. I can get the first sim card in slot 1 using PhoneStateListener with onSignalStrengthsChanged () function.
Does anyone have any tips? The functions I got from reflection:
###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
And by the way, both SIM cards are active at the same time (no need to switch between SIM cards), since I can make a phone call using both phone numbers without switching the SIM card to the phone.
Thank!
source to share
Thanks for the answer! I haven't tried your solution, but I found my own solution that worked.
Another constructor can be used for TelephonyManager where you can go to the SIM slot you want to control:
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);
}
}
}
source to share
For this particular version of TelephonyManager, instead of
TelephonyManager.listen (phoneStateListener, state)
which only listens to the default SIM, you can try using 2 instances of your PhoneStateListener and call
TelephonyManager.listenGemini (phoneStateListener1, state, 0)
for the first SIM card and
TelephonyManager.listenGemini (phoneStateListener2, state, 1)
for the second SIM-card,
where the third parameter for listenGemini
is the SIM card number.
source to share