【記錄】 Android 雙卡手機獲取兩個IMEI等
1、前言
專案中遇到上傳手機imei的問題。如果手機是雙卡,目前只能獲取預設的imei
- TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- deviceId = mTelephonyMgr.getDeviceId();
上網搜了很多程式碼終於找到一個有效的辦法。
地址: 原創地址
3、防止原創地址不可用,現在貼程式碼
- import java.lang.reflect.Method;
-
import
- import android.telephony.TelephonyManager;
- import android.text.TextUtils;
- publicclass CTelephoneInfo {
- privatestaticfinal String TAG = CTelephoneInfo.class.getSimpleName();
- private String imeiSIM1;// IMEI
- private String imeiSIM2;//IMEI
-
private String iNumeric1;
- private String iNumeric2;//sim2 code number
- privateboolean isSIM1Ready;//sim1
- privateboolean isSIM2Ready;//sim2
- private String iDataConnected1 = "0";//sim1 0 no, 1 connecting, 2 connected, 3 suspended.
- private String iDataConnected2 = "0";//sim2
-
privatestatic CTelephoneInfo CTelephoneInfo;
- privatestatic Context mContext;
- private CTelephoneInfo() {
- }
- publicsynchronizedstatic CTelephoneInfo getInstance(Context context){
- if(CTelephoneInfo == null) {
- CTelephoneInfo = new CTelephoneInfo();
- }
- mContext = context;
- return CTelephoneInfo;
- }
- public String getImeiSIM1() {
- return imeiSIM1;
- }
- public String getImeiSIM2() {
- return imeiSIM2;
- }
- publicboolean isSIM1Ready() {
- return isSIM1Ready;
- }
- publicboolean isSIM2Ready() {
- return isSIM2Ready;
- }
- publicboolean isDualSim(){
- return imeiSIM2 != null;
- }
- publicboolean isDataConnected1(){
- if(TextUtils.equals(iDataConnected1, "2")||TextUtils.equals(iDataConnected1, "1"))
- returntrue;
- else
- returnfalse;
- }
- publicboolean isDataConnected2(){
- if(TextUtils.equals(iDataConnected2, "2")||TextUtils.equals(iDataConnected2, "1"))
- returntrue;
- else
- returnfalse;
- }
- public String getINumeric1(){
- return iNumeric1;
- }
- public String getINumeric2(){
- return iNumeric2;
- }
- public String getINumeric(){
- if(imeiSIM2 != null){
- if(iNumeric1 != null && iNumeric1.length() > 1)
- return iNumeric1;
- if(iNumeric2 != null && iNumeric2.length() > 1)
- return iNumeric2;
- }
- return iNumeric1;
- }
- publicvoid setCTelephoneInfo(){
- TelephonyManager telephonyManager = ((TelephonyManager)
- mContext.getSystemService(Context.TELEPHONY_SERVICE));
- CTelephoneInfo.imeiSIM1 = telephonyManager.getDeviceId();
- CTelephoneInfo.imeiSIM2 = null;
- try {
- CTelephoneInfo.imeiSIM1 = getOperatorBySlot(mContext, "getDeviceIdGemini", 0);
- CTelephoneInfo.imeiSIM2 = getOperatorBySlot(mContext, "getDeviceIdGemini", 1);
- CTelephoneInfo.iNumeric1 = getOperatorBySlot(mContext, "getSimOperatorGemini", 0);
- CTelephoneInfo.iNumeric2 = getOperatorBySlot(mContext, "getSimOperatorGemini", 1);
- CTelephoneInfo.iDataConnected1 = getOperatorBySlot(mContext, "getDataStateGemini", 0);
- CTelephoneInfo.iDataConnected2 = getOperatorBySlot(mContext, "getDataStateGemini", 1);
- } catch (GeminiMethodNotFoundException e) {
- e.printStackTrace();
- try {
- CTelephoneInfo.imeiSIM1 = getOperatorBySlot(mContext, "getDeviceId", 0);
- CTelephoneInfo.imeiSIM2 = getOperatorBySlot(mContext, "getDeviceId", 1);
- CTelephoneInfo.iNumeric1 = getOperatorBySlot(mContext, "getSimOperator", 0);
- CTelephoneInfo.iNumeric2 = getOperatorBySlot(mContext, "getSimOperator", 1);
- CTelephoneInfo.iDataConnected1 = getOperatorBySlot(mContext, "getDataState", 0);
- CTelephoneInfo.iDataConnected2 = getOperatorBySlot(mContext, "getDataState", 1);
- } catch (GeminiMethodNotFoundException e1) {
- //Call here for next manufacturer's predicted method name if you wish
- e1.printStackTrace();
- }
- }
- CTelephoneInfo.isSIM1Ready = telephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY;
- CTelephoneInfo.isSIM2Ready = false;
- try {
- CTelephoneInfo.isSIM1Ready = getSIMStateBySlot(mContext, "getSimStateGemini", 0);
- CTelephoneInfo.isSIM2Ready = getSIMStateBySlot(mContext, "getSimStateGemini", 1);
- } catch (GeminiMethodNotFoundException e) {
- e.printStackTrace();
- try {
- CTelephoneInfo.isSIM1Ready = getSIMStateBySlot(mContext, "getSimState", 0);
- CTelephoneInfo.isSIM2Ready = getSIMStateBySlot(mContext, "getSimState", 1);
- } catch (GeminiMethodNotFoundException e1) {
- //Call here for next manufacturer's predicted method name if you wish
- e1.printStackTrace();
- }
- }
- }
- privatestatic String getOperatorBySlot(Context context, String predictedMethodName, int slotID)
- throws GeminiMethodNotFoundException {
- String inumeric = 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
相關推薦
【記錄】 Android 雙卡手機獲取兩個IMEI等
1、前言 專案中遇到上傳手機imei的問題。如果手機是雙卡,目前只能獲取預設的imei TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_
Android獲取本機號碼(雙卡雙待無法獲取兩個號碼)
搞了一個想獲取Android手機的本機號碼的功能,但是發現雙卡雙待的手機是無法獲取到兩個號碼 的。在Android的官方文件是沒有提供相應的Api的,因為標準的Andoird是沒有雙卡的,好像也只有國內才會搞雙卡雙待的神器吧。以下記錄一下做這個功能所學習到的
【leetcode】#陣列【Python】88. 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
【GitLab】git一個專案託管到兩個遠端倉庫
需求 之前一直採用的第三方的程式碼託管平臺,最近公司內部採購了一臺伺服器,來做公司內部的程式碼倉庫,所以需要將之前的程式碼新增到新的倉庫中。 實現 連線區域網的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鍵的操作
【android】Android Studio連線手機沒反應,提示錯誤adb.exe start-server' failed -- run manually if necessary
摘要:有時候我們在把手機連線到AndroidStudio當中的時候會出現手機無法識別,連線視窗中顯示Nothingtoshow的情況,而我手機之前連線還是好好的呀,怎麼回事呢?我們再看一下底部提示的錯誤資訊,一般如下:'C:/Users/ZHXG/AppData/Local/Android/S
【Log】android手機除錯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 -