1. 程式人生 > >【記錄】 Android 雙卡手機獲取兩個IMEI等

【記錄】 Android 雙卡手機獲取兩個IMEI等

1、前言

專案中遇到上傳手機imei的問題。如果手機是雙卡,目前只能獲取預設的imei

  1. TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);     
  2. deviceId = mTelephonyMgr.getDeviceId();  
2、解決辦法

上網搜了很多程式碼終於找到一個有效的辦法。

地址:  原創地址

3、防止原創地址不可用,現在貼程式碼

  1. import java.lang.reflect.Method;  
  2. import
     android.content.Context;  
  3. import android.telephony.TelephonyManager;  
  4. import android.text.TextUtils;  
  5. publicclass CTelephoneInfo {  
  6.     privatestaticfinal String TAG = CTelephoneInfo.class.getSimpleName();  
  7.     private String imeiSIM1;// IMEI
  8.     private String imeiSIM2;//IMEI  
  9.     private String iNumeric1;
    //sim1 code number 
  10.     private String iNumeric2;//sim2 code number 
  11.     privateboolean isSIM1Ready;//sim1
  12.     privateboolean isSIM2Ready;//sim2
  13.     private String iDataConnected1 = "0";//sim1 0 no, 1 connecting, 2 connected, 3 suspended.
  14.     private String iDataConnected2 = "0";//sim2
  15.     privatestatic CTelephoneInfo CTelephoneInfo;  
  16.     privatestatic Context mContext;  
  17.     private CTelephoneInfo() {  
  18.     }  
  19.     publicsynchronizedstatic CTelephoneInfo getInstance(Context context){  
  20.         if(CTelephoneInfo == null) {      
  21.             CTelephoneInfo = new CTelephoneInfo();  
  22.         }  
  23.         mContext = context;       
  24.         return CTelephoneInfo;  
  25.     }  
  26.     public String getImeiSIM1() {  
  27.         return imeiSIM1;  
  28.     }  
  29.     public String getImeiSIM2() {  
  30.         return imeiSIM2;  
  31.     }  
  32.     publicboolean isSIM1Ready() {  
  33.         return isSIM1Ready;  
  34.     }  
  35.     publicboolean isSIM2Ready() {  
  36.         return isSIM2Ready;  
  37.     }  
  38.     publicboolean isDualSim(){  
  39.         return imeiSIM2 != null;  
  40.     }  
  41.     publicboolean isDataConnected1(){  
  42.         if(TextUtils.equals(iDataConnected1, "2")||TextUtils.equals(iDataConnected1, "1"))  
  43.             returntrue;  
  44.         else
  45.             returnfalse;  
  46.     }  
  47.     publicboolean isDataConnected2(){  
  48.         if(TextUtils.equals(iDataConnected2, "2")||TextUtils.equals(iDataConnected2, "1"))  
  49.             returntrue;  
  50.         else
  51.             returnfalse;  
  52.     }  
  53.     public String getINumeric1(){  
  54.         return iNumeric1;  
  55.     }  
  56.     public String getINumeric2(){  
  57.         return iNumeric2;  
  58.     }  
  59.     public String getINumeric(){  
  60.         if(imeiSIM2 != null){  
  61.             if(iNumeric1 != null && iNumeric1.length() > 1)  
  62.                 return iNumeric1;  
  63.             if(iNumeric2 != null && iNumeric2.length() > 1)  
  64.                 return iNumeric2;  
  65.         }         
  66.         return iNumeric1;  
  67.     }  
  68.     publicvoid setCTelephoneInfo(){  
  69.         TelephonyManager telephonyManager = ((TelephonyManager)   
  70.                 mContext.getSystemService(Context.TELEPHONY_SERVICE));    
  71.         CTelephoneInfo.imeiSIM1 = telephonyManager.getDeviceId();  
  72.         CTelephoneInfo.imeiSIM2 = null;   
  73.         try {  
  74.             CTelephoneInfo.imeiSIM1 = getOperatorBySlot(mContext, "getDeviceIdGemini"0);  
  75.             CTelephoneInfo.imeiSIM2 = getOperatorBySlot(mContext, "getDeviceIdGemini"1);  
  76.             CTelephoneInfo.iNumeric1 = getOperatorBySlot(mContext, "getSimOperatorGemini"0);  
  77.             CTelephoneInfo.iNumeric2 = getOperatorBySlot(mContext, "getSimOperatorGemini"1);  
  78.             CTelephoneInfo.iDataConnected1 = getOperatorBySlot(mContext, "getDataStateGemini"0);  
  79.             CTelephoneInfo.iDataConnected2 = getOperatorBySlot(mContext, "getDataStateGemini"1);  
  80.         } catch (GeminiMethodNotFoundException e) {  
  81.             e.printStackTrace();  
  82.             try {  
  83.                  CTelephoneInfo.imeiSIM1 = getOperatorBySlot(mContext, "getDeviceId"0);  
  84.                  CTelephoneInfo.imeiSIM2 = getOperatorBySlot(mContext, "getDeviceId"1);  
  85.                  CTelephoneInfo.iNumeric1 = getOperatorBySlot(mContext, "getSimOperator"0);  
  86.                  CTelephoneInfo.iNumeric2 = getOperatorBySlot(mContext, "getSimOperator"1);   
  87.                  CTelephoneInfo.iDataConnected1 = getOperatorBySlot(mContext, "getDataState"0);  
  88.                  CTelephoneInfo.iDataConnected2 = getOperatorBySlot(mContext, "getDataState"1);  
  89.             } catch (GeminiMethodNotFoundException e1) {  
  90.                 //Call here for next manufacturer's predicted method name if you wish
  91.                 e1.printStackTrace();  
  92.             }  
  93.         }  
  94.         CTelephoneInfo.isSIM1Ready = telephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY;  
  95.         CTelephoneInfo.isSIM2Ready = false;  
  96.         try {  
  97.             CTelephoneInfo.isSIM1Ready = getSIMStateBySlot(mContext, "getSimStateGemini"0);  
  98.             CTelephoneInfo.isSIM2Ready = getSIMStateBySlot(mContext, "getSimStateGemini"1);  
  99.         } catch (GeminiMethodNotFoundException e) {  
  100.             e.printStackTrace();  
  101.             try {  
  102.                 CTelephoneInfo.isSIM1Ready = getSIMStateBySlot(mContext, "getSimState"0);  
  103.                 CTelephoneInfo.isSIM2Ready = getSIMStateBySlot(mContext, "getSimState"1);  
  104.             } catch (GeminiMethodNotFoundException e1) {  
  105.                 //Call here for next manufacturer's predicted method name if you wish
  106.                 e1.printStackTrace();  
  107.             }  
  108.         }  
  109.     }  
  110.     privatestatic  String getOperatorBySlot(Context context, String predictedMethodName, int slotID)   
  111.              throws GeminiMethodNotFoundException {   
  112.         String inumeric = null;   
  113.         TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);      
  114.         try{      
  115.             Class<?> telephonyClass = Class.forName(telephony.getClass().getName());    
  116.             Class<?>[] parameter = new Class[1];  
  117.             parameter[0] = int.class;  
  118.             Method getSimID = telephonyClass.getMethod(predictedMethodName, parameter);               
  119.             Object[] obParameter = new Object[1];  
  120.             obParameter[0] = slotID;  
  121.             Object ob_phone = getSimID.invoke(telephony, obParameter);    
  122.             if(ob_phone != null

    相關推薦

    記錄 Android 手機獲取IMEI

    1、前言 專案中遇到上傳手機imei的問題。如果手機是雙卡,目前只能獲取預設的imei TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_

    Android獲取本機號碼(待無法獲取號碼)

            搞了一個想獲取Android手機的本機號碼的功能,但是發現雙卡雙待的手機是無法獲取到兩個號碼 的。在Android的官方文件是沒有提供相應的Api的,因為標準的Andoird是沒有雙卡的,好像也只有國內才會搞雙卡雙待的神器吧。以下記錄一下做這個功能所學習到的

    leetcode#陣列Python88. Merge Sorted Array 合併有序陣列

    題目: 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m

    筆記JunitTest的@Test註解的引數

    部落格中的部分字句引自慕課網的《JUnit-Java單元測試必備工具》公開課程。 @Test:將一個普通的方法修飾成為一個測試方法 @Test public void testDivide() { assertEquals(3, new Calculate().div

    GitLabgit一個專案託管到遠端倉庫

    需求 之前一直採用的第三方的程式碼託管平臺,最近公司內部採購了一臺伺服器,來做公司內部的程式碼倉庫,所以需要將之前的程式碼新增到新的倉庫中。 實現 連線區域網的GitLab 設定本地的hosts檔案 192.168.*.** **.***

    MySQL一臺伺服器上搭建mysql節點

    環境: CentOS 6.8  memory:1G Mysql 5.7 二進位制安裝包 1.安裝相關的環境包 yum -y install gcc glibc libaio libstdc++ libstdc ncurses-libs  2.檢視系統中是否存在已經安裝的

    Java利用String的compareTo比較時期字串

    在《【Java】比對兩個以字串形式表示的時期是否相差超過1天》(點選開啟連結)曾經介紹過,如果利用字串的擷取來比較兩個在資料庫中取出來,被特定格式化的日期。然而,這具有一定的侷限性,最大的缺點出在擷取字串太複雜太麻煩。 其實可以利用String的compareTo比較兩個表

    可能有點用的記錄Android Studio 3.2.1更新(2)

    前幾天更新到3.2.1 開啟原來的專案報了個奇怪的錯 Could not find aapt2-proto.jar (com.android.tools.build:aapt2-proto:0.3.1). Searched in the following location

    毫無營養的記錄Android Studio 3.2.1更新

    8月份更新3.1.4後滿滿的問題,發誓不再亂更新。 但是······自從接收到新版本推送起,就各種卡頓,都想把電腦砸了。 電腦配置一般,但也不至於太差,附一張電腦配置以及效能監控圖(電腦管家偷效能?) 更新到3.2.1後,preview又出問題了,載入不

    adb.Android手機可以通過adb執行按鍵操作

    1、Android手機可以通過adb執行按鍵操作 - sealee01 - CSDN部落格.html(https://blog.csdn.net/u013678906/article/details/78540585) 2、 Android手機可以通過adb執行按鍵操作 如下,執行的是home鍵的操作

    androidAndroid Studio連線手機沒反應,提示錯誤adb.exe start-server' failed -- run manually if necessary

    摘要:有時候我們在把手機連線到AndroidStudio當中的時候會出現手機無法識別,連線視窗中顯示Nothingtoshow的情況,而我手機之前連線還是好好的呀,怎麼回事呢?我們再看一下底部提示的錯誤資訊,一般如下:'C:/Users/ZHXG/AppData/Local/Android/S

    Logandroid手機除錯AP側(main、kernel)、BP側和ANR、hcidump的log抓取方法

    AP的log抓取   主要有main log和kernel log兩種。 1、Main log   註釋:     Main log為應用程式的log,也是最常用的一種。提交功能性bug時,一般都要提供Main log。   方法1:     在手機後臺裡開一個程

    毫無營養的記錄Android Studio 3.2.1更新(2)

    前幾天更新到3.2.1 開啟原來的專案報了個奇怪的錯 Could not find aapt2-proto.jar (com.android.tools.build:aapt2-proto:0.3.1). Searched in the following

    筆記Android開發中從EditText中獲取數字

    xml檔案中 <EditText android:id="@+id/editText_age" android:layout_width="match_p

    學以致用android功能實現7---android8.0 Launcher獲取快捷方式原始碼分析(3)

    獲取完快捷方式的資訊之後,便是如何具體的將快捷方式的名字,圖示和開啟方式放置到桌面上。 最後一步addAndBindAddedWorkspaceItems(                 new LazyShortcutsProvider(context.getAppl

    最新Android 手機解析度整理(做螢幕適配的拿走)

    Android 手機解析度:320x480    320x400480x800    480x854540x960600x1024720x1184    720x1196    720x1280768x1024    768x1280800x12801080x1776   

    學以致用android功能實現5---android8.0 Launcher獲取快捷方式原始碼分析(1)

    從其他應用往桌面建立快捷方式,android8.0統一採用requestPinShortcut的方式。 對於桌面而言,是怎麼從requestPinShortcut獲取快捷方式資訊在桌面建立快捷方式呢? Android8.0的快捷方式引數不再通過廣播傳送,而是存放在系統當中

    記錄selenium+xpath 文字資訊定位,獲取父節點屬性

    頁面部分程式碼如下 <td id="reportHeader47" header-class="'header-report-name'" data-title="'label.report'|i18n" sortable="'name'" filt

    記錄mybatis中獲取常量類中資料

    部分轉載,已註明來源:1、mybatis中獲取常量類中資料<update id="refuseDebt">        UPDATE dt_debt a SET        a.debt_status = ${@[email protected]_R

    機智Android 微信6.2以上版本 轉移聊天記錄到ios,當前Wi-Fi環境複雜,無法傳輸 問題

    問題描述 直接看解決方案,不想聽來龍去脈? 請點傳送門 買了個iPhone,想把以前Android上微信的聊天記錄轉移過來,於是乎,想到了幾個辦法: - 電腦備份,然後恢復到iPhone -