2016-10-20 19 views
-2
public String getImsiSIM1() { 
    return imsiSIM1; 
} 
public String getImsiSIM2() { 
    return imsiSIM2; 
} 
public boolean isSIM1Ready() { 
    return isSIM1Ready; 
} 
public boolean isSIM2Ready() { 
    return isSIM2Ready; 
} 

/*public static void setSIM2Ready(boolean isSIM2Ready) { 
    TelephonyInfo.isSIM2Ready = isSIM2Ready; 
}*/ 

public boolean isDualSIM() { 
    return imsiSIM2 != null; 
} 


public String getNetworkOperator(){ 
    return networkOperatorOne ; 
} 
public String getNetworkOperatorDual(){ 
    return networkOperatorDual ; 

} 

private TelephonyInfo() { 
} 

public static TelephonyInfo getInstance(Context context){ 

    if(telephonyInfo == null) { 

     telephonyInfo = new TelephonyInfo(); 

     TelephonyManager telephonyManager = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)); 

     telephonyInfo.imsiSIM1 = telephonyManager.getDeviceId();; 
     telephonyInfo.imsiSIM2 = null; 

     telephonyInfo.networkOperatorOne =telephonyManager.getNetworkOperator(); 
     telephonyInfo.networkOperatorDual = null ; 

     try { 
      telephonyInfo.imsiSIM1 = getDeviceIdBySlot(context, "getDeviceIdGemini", 0); 
      telephonyInfo.imsiSIM2 = getDeviceIdBySlot(context, "getDeviceIdGemini", 1); 
      telephonyInfo.networkOperatorOne = getCarrierName(context,"getCarrierName",0); 
      telephonyInfo.networkOperatorDual = getCarrierName(context,"getCarrierName",1); 

     } catch (GeminiMethodNotFoundException e) { 
      e.printStackTrace(); 

      try { 
       telephonyInfo.imsiSIM1 = getDeviceIdBySlot(context, "getDeviceId", 0); 
       telephonyInfo.imsiSIM2 = getDeviceIdBySlot(context, "getDeviceId", 1); 
       telephonyInfo.networkOperatorOne = getCarrierName(context,"getCarrierName",0); 
       telephonyInfo.networkOperatorDual = getCarrierName(context,"getCarrierName",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 imsi = null; 

    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 

    try{ 

     Class<?> telephonyClass = Class.forName(telephony.getClass().getName()); 

     Class<?>[] parameter = new Class[1]; 
     parameter[0] = int.class; 
     Method getSimID = telephonyClass.getMethod(predictedMethodName, parameter); 

     Object[] obParameter = new Object[1]; 
     obParameter[0] = slotID; 
     Object ob_phone = getSimID.invoke(telephony, obParameter); 

     if(ob_phone != null){ 
      imsi = ob_phone.toString(); 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     throw new GeminiMethodNotFoundException(predictedMethodName); 
    } 

    return imsi; 
} 

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<?>[] parameter = new Class[1]; 
     parameter[0] = int.class; 
     Method getSimStateGemini = telephonyClass.getMethod(predictedMethodName, parameter); 

     Object[] obParameter = new Object[1]; 
     obParameter[0] = slotID; 
     Object ob_phone = getSimStateGemini.invoke(telephony, obParameter); 

     if(ob_phone != null){ 
      int simState = Integer.parseInt(ob_phone.toString()); 
      if(simState == TelephonyManager.SIM_STATE_READY){ 
       isReady = true; 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     throw new GeminiMethodNotFoundException(predictedMethodName); 
    } 

    return isReady; 
} 

private static String getCarrierName(Context context, String predictedMethodName, int slotID) throws GeminiMethodNotFoundException { 

    String carrier = null; 

    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 

    try{ 

     Class<?> telephonyClass = Class.forName(telephony.getClass().getName()); 

     Class<?>[] parameter = new Class[1]; 
     parameter[0] = int.class; 
     Method sim = telephonyClass.getMethod(predictedMethodName, parameter); 

     Object[] obParameter = new Object[1]; 
     obParameter[0] = slotID; 
     Object ob_phone = sim.invoke(telephony, obParameter); 

     if(ob_phone != null){ 
      carrier = ob_phone.toString(); 
      if(carrier .equals(TelephonyManager.SIM_STATE_READY)) { 
       Log.d("Services","servicessss"+carrier); 
       ; 
      } 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     throw new GeminiMethodNotFoundException(predictedMethodName); 
    } 

    return carrier; 
} 


private static class GeminiMethodNotFoundException extends Exception { 

    private static final long serialVersionUID = -996812356902545308L; 

    public GeminiMethodNotFoundException(String info) { 
     super(info); 
    } 
} 
} 
+0

請幫助我請 –

+0

您的意思是獲取提供者名稱? –

+0

是@AbhishekPatel –

回答

0

你可以試試這個:

TelephonyManager telephonyManager =((TelephonyManager) Context.getSystemService(Context.TELEPHONY_SERVICE)); 
String operatorName = telephonyManager.getSimOperatorName(); 

你可以閱讀更多here。 我希望能解決這個問題。祝你今天愉快!

+0

在這裏我只得到一個SIM卡操作員名稱那麼另一個,是否意味着如果雙重SIM然後? –