2016-06-27 55 views
0

我試圖從雙卡Android設備比22更高的API級別我想捕捉以下細節得到SIM 2的細節2個細節,如何獲得SIM從Android設備

Sim2SubscriberId 
Sim2SimOperator 
Sim2OperatorName 
Sim2NetworkType 
Sim2NetworkOperatorName 
Sim2SerialNumber 

如何我們可以從SubscriptionInfo獲取詳細信息嗎? 請幫助

回答

0

產生這個類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<?>[] 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){ 
      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<?>[] 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 class GeminiMethodNotFoundException extends Exception { 

    private static final long serialVersionUID = -996812356902545308L; 

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

然後使用這個類這樣的:

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"); 
} 

添加此權限的應用程序的AndroidManifest.xml:

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

謝謝,但它僅用於獲取設備I d。我想捕捉Sim2SubscriberId, Sim2SimOperator, Sim2OperatorName, Sim2NetworkType, Sim2NetworkOperatorName, Sim2SerialNumber。 –

+0

上面的代碼工作正常,只能獲得雙SIM卡設備的IMEI。 –

相關問題