Obtenha os dois numbers sim num telefone Android dual sim

Eu quero obter ambos os numbers sim em um dispositivo dual sim.

2 Solutions collect form web for “Obtenha os dois numbers sim num telefone Android dual sim”

Faça esta class TelephonyInfo .java:

import java.lang.reflect.Method; import android.content.Context; import android.telephony.TelephonyManager; public final class TelephonyInfo { private static TelephonyInfo telephonyInfo; private String imeiSIM1; private String imeiSIM2; private boolean isSIM1Ready; private boolean isSIM2Ready; public String getImeiSIM1() { return imeiSIM1; } /*public static void setImeiSIM1(String imeiSIM1) { TelephonyInfo.imeiSIM1 = imeiSIM1; }*/ public String getImeiSIM2() { return imeiSIM2; } /*public static void setImeiSIM2(String imeiSIM2) { TelephonyInfo.imeiSIM2 = imeiSIM2; }*/ public boolean isSIM1Ready() { return isSIM1Ready; } /*public static void setSIM1Ready(boolean isSIM1Ready) { TelephonyInfo.isSIM1Ready = isSIM1Ready; }*/ public boolean isSIM2Ready() { return isSIM2Ready; } /*public static void setSIM2Ready(boolean isSIM2Ready) { TelephonyInfo.isSIM2Ready = isSIM2Ready; }*/ public boolean isDualSIM() { return imeiSIM2 != null; } private TelephonyInfo() { } public static TelephonyInfo getInstance(Context context){ if(telephonyInfo == null) { telephonyInfo = new TelephonyInfo(); TelephonyManager telephonyManager = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)); telephonyInfo.imeiSIM1 = telephonyManager.getDeviceId();; telephonyInfo.imeiSIM2 = null; try { telephonyInfo.imeiSIM1 = getDeviceIdBySlot(context, "getDeviceIdGemini", 0); telephonyInfo.imeiSIM2 = getDeviceIdBySlot(context, "getDeviceIdGemini", 1); } catch (GeminiMethodNotFoundException e) { e.printStackTrace(); try { telephonyInfo.imeiSIM1 = getDeviceIdBySlot(context, "getDeviceId", 0); telephonyInfo.imeiSIM2 = getDeviceIdBySlot(context, "getDeviceId", 1); } catch (GeminiMethodNotFoundException e1) { //Call here for next manufacturer's predicted method name if you wish e1.printStackTrace(); } } telephonyInfo.isSIM1Ready = telephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY; telephonyInfo.isSIM2Ready = false; try { telephonyInfo.isSIM1Ready = getSIMStateBySlot(context, "getSimStateGemini", 0); telephonyInfo.isSIM2Ready = getSIMStateBySlot(context, "getSimStateGemini", 1); } catch (GeminiMethodNotFoundException e) { e.printStackTrace(); try { telephonyInfo.isSIM1Ready = getSIMStateBySlot(context, "getSimState", 0); telephonyInfo.isSIM2Ready = getSIMStateBySlot(context, "getSimState", 1); } catch (GeminiMethodNotFoundException e1) { //Call here for next manufacturer's predicted method name if you wish e1.printStackTrace(); } } } return telephonyInfo; } private static String getDeviceIdBySlot(Context context, String predictedMethodName, int slotID) throws GeminiMethodNotFoundException { String imei = null; TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try{ Class<?> telephonyClass = Class.forName(telephony.getClass().getName()); Class<?>[] pairameter = new Class[1]; pairameter[0] = int.class; Method getSimID = telephonyClass.getMethod(predictedMethodName, pairameter); Object[] obPairameter = new Object[1]; obPairameter[0] = slotID; Object ob_phone = getSimID.invoke(telephony, obPairameter); if(ob_phone != null){ imei = ob_phone.toString(); } } catch (Exception e) { e.printStackTrace(); throw new GeminiMethodNotFoundException(predictedMethodName); } return imei; } private static boolean getSIMStateBySlot(Context context, String predictedMethodName, int slotID) throws GeminiMethodNotFoundException { boolean isReady = false; TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try{ Class<?> telephonyClass = Class.forName(telephony.getClass().getName()); Class<?>[] pairameter = new Class[1]; pairameter[0] = int.class; Method getSimStateGemini = telephonyClass.getMethod(predictedMethodName, pairameter); Object[] obPairameter = new Object[1]; obPairameter[0] = slotID; Object ob_phone = getSimStateGemini.invoke(telephony, obPairameter); if(ob_phone != null){ int simState = Integer.pairseInt(ob_phone.toString()); if(simState == TelephonyManager.SIM_STATE_READY){ isReady = true; } } } catch (Exception e) { e.printStackTrace(); throw new GeminiMethodNotFoundException(predictedMethodName); } return isReady; } private static class GeminiMethodNotFoundException extends Exception { private static final long serialVersionUID = -996812356902545308L; public GeminiMethodNotFoundException(String info) { super(info); } } 

}

E então use essa class assim:

 private void isDualSimOrNot(){ TelephonyInfo telephonyInfo = TelephonyInfo.getInstance(this); String imeiSIM1 = telephonyInfo.getImeiSIM1(); String imeiSIM2 = telephonyInfo.getImeiSIM2(); boolean isSIM1Ready = telephonyInfo.isSIM1Ready(); boolean isSIM2Ready = telephonyInfo.isSIM2Ready(); boolean isDualSIM = telephonyInfo.isDualSIM(); Log.i("Dual = "," IME1 : " + imeiSIM1 + "\n" + " IME2 : " + imeiSIM2 + "\n" + " IS DUAL SIM : " + isDualSIM + "\n" + " IS SIM1 READY : " + isSIM1Ready + "\n" + " IS SIM2 READY : " + isSIM2Ready + "\n"); } 

Adicione esta permissão aos aplicativos AndroidManifest.xml:

 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

O código acima funciona perfeitamente paira mim.

Trabalhair com API> 21

Preciso permissão android.Manifest.permission.READ_PHONE_STATE.

 public class SplahActivity extends AppCompatActivity { private Context context; private SubscriptionManager mSubscriptionManager; public static boolean isMultiSimEnabled = false; public static String defaultSimName; public static List<SubscriptionInfo> subInfoList; public static ArrayList<String> Numbers; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = this; setContentView(R.layout.activity_splah); Numbers = new ArrayList<String>(); mSubscriptionManager = SubscriptionManager.from(context); GetCairriorsInformation(); } private void GetCairriorsInformation() { subInfoList = mSubscriptionManager.getActiveSubscriptionInfoList(); if (subInfoList.size() > 1) { isMultiSimEnabled = true; } for (SubscriptionInfo subscriptionInfo : subInfoList) { Numbers.add(subscriptionInfo.getNumber()); } } } } public class SplahActivity extends AppCompatActivity { private Context context; private SubscriptionManager mSubscriptionManager; public static boolean isMultiSimEnabled = false; public static String defaultSimName; public static List<SubscriptionInfo> subInfoList; public static ArrayList<String> Numbers; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = this; setContentView(R.layout.activity_splah); Numbers = new ArrayList<String>(); mSubscriptionManager = SubscriptionManager.from(context); GetCairriorsInformation(); } private void GetCairriorsInformation() { subInfoList = mSubscriptionManager.getActiveSubscriptionInfoList(); if (subInfoList.size() > 1) { isMultiSimEnabled = true; } for (SubscriptionInfo subscriptionInfo : subInfoList) { Numbers.add(subscriptionInfo.getNumber()); } } } } public class SplahActivity extends AppCompatActivity { private Context context; private SubscriptionManager mSubscriptionManager; public static boolean isMultiSimEnabled = false; public static String defaultSimName; public static List<SubscriptionInfo> subInfoList; public static ArrayList<String> Numbers; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = this; setContentView(R.layout.activity_splah); Numbers = new ArrayList<String>(); mSubscriptionManager = SubscriptionManager.from(context); GetCairriorsInformation(); } private void GetCairriorsInformation() { subInfoList = mSubscriptionManager.getActiveSubscriptionInfoList(); if (subInfoList.size() > 1) { isMultiSimEnabled = true; } for (SubscriptionInfo subscriptionInfo : subInfoList) { Numbers.add(subscriptionInfo.getNumber()); } } } } public class SplahActivity extends AppCompatActivity { private Context context; private SubscriptionManager mSubscriptionManager; public static boolean isMultiSimEnabled = false; public static String defaultSimName; public static List<SubscriptionInfo> subInfoList; public static ArrayList<String> Numbers; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = this; setContentView(R.layout.activity_splah); Numbers = new ArrayList<String>(); mSubscriptionManager = SubscriptionManager.from(context); GetCairriorsInformation(); } private void GetCairriorsInformation() { subInfoList = mSubscriptionManager.getActiveSubscriptionInfoList(); if (subInfoList.size() > 1) { isMultiSimEnabled = true; } for (SubscriptionInfo subscriptionInfo : subInfoList) { Numbers.add(subscriptionInfo.getNumber()); } } } } public class SplahActivity extends AppCompatActivity { private Context context; private SubscriptionManager mSubscriptionManager; public static boolean isMultiSimEnabled = false; public static String defaultSimName; public static List<SubscriptionInfo> subInfoList; public static ArrayList<String> Numbers; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = this; setContentView(R.layout.activity_splah); Numbers = new ArrayList<String>(); mSubscriptionManager = SubscriptionManager.from(context); GetCairriorsInformation(); } private void GetCairriorsInformation() { subInfoList = mSubscriptionManager.getActiveSubscriptionInfoList(); if (subInfoList.size() > 1) { isMultiSimEnabled = true; } for (SubscriptionInfo subscriptionInfo : subInfoList) { Numbers.add(subscriptionInfo.getNumber()); } } } 

SubscriptionManager Api 22 Android Official

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.