最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android如何獲取雙卡手機IMEI的方法示例

 更新時間:2018年09月22日 08:53:30   作者:黃光華  
這篇文章主要介紹了Android如何獲取雙卡手機IMEI的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言:

項目中有個統(tǒng)計付費廣告轉(zhuǎn)化率的需求,需要獲取用戶手機的IMEI。但是網(wǎng)上最常見的方法有坑,也就是TelephonyManager.getDeviceId(),這方法有可能獲取的是MEID或者空值。然后自己Google了下,發(fā)現(xiàn)搜出來的靠前的幾個答案都不能正確獲取到兩個IMEI值。然后看到TelephonyManager源碼中g(shù)etDeviceId()方法的下一個方法就是getImei()方法,只不過被系統(tǒng)隱藏掉了。運用反射調(diào)用一下,的確能獲取兩個IMEI值,故在此分享一下~~

背景:

一般的獲取IMEI的代碼是這樣的

public static String getIMEI(Context context) {
      TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
      String imei = telephonyManager.getDeviceId();
      return imei;
  }

源碼中的注釋已經(jīng)說明了,這方法可能返回IMEI,也可能返回MEID。我用的華為返回的就是MEID。他還有個帶參數(shù)的方法getDeviceId(int slotId),這個slotId應(yīng)該就是卡槽編號,可能也能獲取到雙卡手機的DeviceId,不過我沒嘗試,因為反正他返回的不一定是我想要的IMEI。

解決方法:

利用反射,把系統(tǒng)隱藏掉的getImei()調(diào)用出來。

/**
   * @param slotId slotId為卡槽Id,它的值為 0、1;
   * @return
   */
  public static String getIMEI(Context context, int slotId) {
    try {
      TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
      Method method = manager.getClass().getMethod("getImei", int.class);
      String imei = (String) method.invoke(manager, slotId);
      return imei;
    } catch (Exception e) {
      return "";
    }
  }

調(diào)用時,分別傳入0、1,就可以獲取到雙卡手機的IMEI了。

PS:獲取主卡的IMEI,IMSI,ICCI的方法

  /**
   * Author: liuqiang
   * Time: 2017-08-14 15:28
   * Description:
   * <p>
   * IMEI 與你的手機是綁定關(guān)系 用于區(qū)別移動終端設(shè)備
   * IMSI 與你的手機卡是綁定關(guān)系 用于區(qū)別移動用戶的有效信息 IMSI是用戶的標識。
   * ICCID ICCID是卡的標識,由20位數(shù)字組成
   * ICCID只是用來區(qū)別SIM卡,不作接入網(wǎng)絡(luò)的鑒權(quán)認證。而IMSI在接入網(wǎng)絡(luò)的時候,會到運營商的服務(wù)器中進行驗證。
   * https://github.com/android/platform_frameworks_base/blob/master/telephony/java/android/telephony/TelephonyManager.java
   */
  @RequiresApi(api = Build.VERSION_CODES.O)
  public void check(View view) {

    TelephonyManager telephonyManager = (TelephonyManager) this
        .getSystemService(TELEPHONY_SERVICE);// 取得相關(guān)系統(tǒng)服務(wù)

    String simOperatorName = telephonyManager.getSimOperatorName();
    String imei = telephonyManager.getDeviceId();    //取出 IMEI
    String imeiAPI26 = telephonyManager.getImei();    //取出 IMEI 需要 api26以上
    String tel = telephonyManager.getLine1Number();   //取出 MSISDN,很可能為空
    String imsi = telephonyManager.getSubscriberId();   //取出 IMSI
    String icc = telephonyManager.getSimSerialNumber(); //取出 ICCID

    Log.d("Q_M", "運行商名字--" + simOperatorName);
    Log.d("Q_M", "IMEI--" + imei);
    Log.d("Q_M", "IMEI_API26--" + imeiAPI26);
    Log.d("Q_M", "IMSI--" + imsi);
    Log.d("Q_M", "ICCID--" + icc);
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • android里TextView加下劃線的幾種方法總結(jié)

    android里TextView加下劃線的幾種方法總結(jié)

    下面小編就為大家?guī)硪黄猘ndroid里TextView加下劃線的幾種方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • Fragment 多層嵌套方法調(diào)用問題的解決方案

    Fragment 多層嵌套方法調(diào)用問題的解決方案

    這篇文章主要介紹了Fragment 多層嵌套方法調(diào)用問題的解決方案的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • Android Studio使用Kotlin時,修改代碼后運行不生效的解決方法

    Android Studio使用Kotlin時,修改代碼后運行不生效的解決方法

    這篇文章主要介紹了Android Studio使用Kotlin時,修改代碼后運行不生效的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Flutter啟動頁(閃屏頁)的具體實現(xiàn)及原理詳析

    Flutter啟動頁(閃屏頁)的具體實現(xiàn)及原理詳析

    這篇文章主要給大家介紹了關(guān)于Flutter啟動頁(閃屏頁)的具體實現(xiàn)及原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習或者使用Flutter具有一定的參考學(xué)習價值,需要的朋友們下面來一起學(xué)習學(xué)習吧
    2019-04-04
  • 詳解Flutter如何繪制曲線,折線圖及波浪動效

    詳解Flutter如何繪制曲線,折線圖及波浪動效

    這篇文章主要為大家介紹線條類圖形的繪制(正弦曲線、折線圖),并且結(jié)合 Animation 實現(xiàn)了常見的波浪動效,感興趣的小伙伴可以了解一下
    2022-03-03
  • Android安裝應(yīng)用 INSTALL_FAILED_DEXOPT 問題及解決辦法

    Android安裝應(yīng)用 INSTALL_FAILED_DEXOPT 問題及解決辦法

    這篇文章主要介紹了Android安裝應(yīng)用 INSTALL_FAILED_DEXOPT 解決辦法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • android平臺HttpGet、HttpPost請求實例

    android平臺HttpGet、HttpPost請求實例

    出自網(wǎng)絡(luò)搜索引擎巨頭的Android平臺,其對網(wǎng)絡(luò)的支持自然不用多說,在Android SDK中已經(jīng)集成了Apache的HttpClient模塊。使用HttpClient模塊,我們就可以使用HTTP協(xié)議進行網(wǎng)絡(luò)連接了
    2014-05-05
  • Android自定義一個屬于自己的時間鐘表操作方法

    Android自定義一個屬于自己的時間鐘表操作方法

    本文主要講解的是如何自定義一個時間鐘表,通過簡單的練習可以簡單學(xué)習android當中自定義view的一些常用繪圖技巧,優(yōu)化android繪圖操作,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • android幾種不同對話框的實現(xiàn)方式

    android幾種不同對話框的實現(xiàn)方式

    這篇文章介紹了android幾種不同對話框的實現(xiàn),主要包括:1、顯示提示消息的對話框.2、簡單列表項對話框。3、單選列表項對話框。4、多選列表對話框。5、自定義列表項對話框。6、自定義View的對話框,需要的朋友可以參考下
    2015-08-08
  • Android實現(xiàn)仿淘寶購物車增加和減少商品數(shù)量功能demo示例

    Android實現(xiàn)仿淘寶購物車增加和減少商品數(shù)量功能demo示例

    這篇文章主要介紹了Android實現(xiàn)仿淘寶購物車增加和減少商品數(shù)量功能,結(jié)合實例形式分析了Android實現(xiàn)的淘寶購物車商品數(shù)量變換與計算相關(guān)技巧,需要的朋友可以參考下
    2016-07-07

最新評論

晋中市| 定结县| 新建县| 云林县| 石狮市| 桂阳县| 阳新县| 普格县| 綦江县| 四子王旗| 建平县| 宝鸡市| 青田县| 花莲市| 寿宁县| 慈溪市| 山东| 冷水江市| 广水市| 白山市| 尖扎县| 电白县| 金寨县| 隆林| 尤溪县| 镇远县| 偃师市| 阳西县| 盐源县| 治多县| 博兴县| 乌恰县| 诸暨市| 和政县| 江城| 重庆市| 海兴县| 新乐市| 定安县| 城步| 博白县|