I want to know Both sim card\'s operator name when mobile is dual sim.In single SIM I got operator name programmatically But For duel SIM I can\'t although after so many sea
Ofcourse you can get the details of dualsim in mobiles below version 22. It is only not officially supported only after 22.
private static String getOutput(Context context, String methodName, int slotId) {
TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
Class> telephonyClass;
String reflectionMethod = null;
String output = null;
try {
telephonyClass = Class.forName(telephony.getClass().getName());
for (Method method : telephonyClass.getMethods()) {
String name = method.getName();
if (name.contains(methodName)) {
Class>[] params = method.getParameterTypes();
if (params.length == 1 && params[0].getName().equals("int")) {
reflectionMethod = name;
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (reflectionMethod != null) {
try {
output = getOpByReflection(telephony, reflectionMethod, slotId, false);
} catch (Exception e) {
e.printStackTrace();
}
}
return output;
}
private static String getOpByReflection(TelephonyManager telephony, String predictedMethodName, int slotID, boolean isPrivate) {
//Log.i("Reflection", "Method: " + predictedMethodName+" "+slotID);
String result = null;
try {
Class> telephonyClass = Class.forName(telephony.getClass().getName());
Class>[] parameter = new Class[1];
parameter[0] = int.class;
Method getSimID;
if (slotID != -1) {
if (isPrivate) {
getSimID = telephonyClass.getDeclaredMethod(predictedMethodName, parameter);
} else {
getSimID = telephonyClass.getMethod(predictedMethodName, parameter);
}
} else {
if (isPrivate) {
getSimID = telephonyClass.getDeclaredMethod(predictedMethodName);
} else {
getSimID = telephonyClass.getMethod(predictedMethodName);
}
}
Object ob_phone;
Object[] obParameter = new Object[1];
obParameter[0] = slotID;
if (getSimID != null) {
if (slotID != -1) {
ob_phone = getSimID.invoke(telephony, obParameter);
} else {
ob_phone = getSimID.invoke(telephony);
}
if (ob_phone != null) {
result = ob_phone.toString();
}
}
} catch (Exception e) {
//e.printStackTrace();
return null;
}
//Log.i("Reflection", "Result: " + result);
return result;
}
Use this two methods. You have to get all sim details by using Java reflection.
Now get the detail you want by just using a single line of code.
String optName = getOutput(context, "getCarrierName", 0);
the first param is the context. second param is the method name you wanna access and the third param is the slotId. "0" means sim 1.
All the result of this method will be string. Convert them as per your need.
Each mobile having its own method. Like micromax is having method like "getCarrierNameGemni". Don't worry, The code I gave you will handle everything for you. If it cant get the result, it will return null. Happy coding!