Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 通過反射及AIDL獲取雙卡手機SIM卡相關信息,及注冊監聽

Android 通過反射及AIDL獲取雙卡手機SIM卡相關信息,及注冊監聽

編輯:關於Android編程

在Android 5.0之前,雖然也有手機是雙卡手機,但是雙卡方案都是ODM廠商自己做的,或者是有芯片廠商提供的源碼完成。因此,如果要在4.4甚至更早之前的手機上獲取雙卡信息,基本上不是一向巨大的工程。雖然之前嘗試過使用反射方法去獲取
  • 高通的“android.telephony.MSimTelephonyManager”類
  • MTK的"com.mediatek.common.telephony.ITelephonyEx.aidl"類,
打印出函數的方法和參數以及類屬性,然後去猜測,但是由於無法直接閱讀源碼,而且ODM廠商也會自己去修改對應的代碼實現其他用戶癢點功能(主卡3/4G網絡,副卡流量)等。 因此在Lollipop之前,雙卡問題是暫時就放棄了。但是其他的功能調用還是有辦法的。 例如在自己的項目下新建如下文件夾 \   把ITelephony.aidl放進來,然後通過反射TelephonyManager的getITelephony()方法獲取 ITelephony實例,進而調用如endCall()等方法來實現如果來電黑名單攔截等方式 eg:\   在Android .0以後,Google 官方API開始支持多SIM卡,這對開發者來說是一件好事,意味著應用能夠實現的功能也越來越多。 在Lollipop上Google又新增了一個Isub.aidl的文件,從命名上就可以看出這是一個進程服務,所以在使用時和ITelephony.adil一樣,在自己的項目裡建立對應adil文件夾,把ISub.aidl拉進來就行了。使用時調用方式如下: \   舉個例子,假設現在是一台雙卡雙待的手機系統是Lollipop,我們想知道現在使用的是哪一張卡作為流量卡,那麼久必須知道默認的流量的subId。具體方法是調用ISub.aidl的getDefaultDataSubId()。 \   對應的流量卡subId後則需要調用到TelephonyManager下的getSubscriberid(long subId)方法,但是這個方法有點坑的地方,就是在5.0的時候參數書long類型的,但是到了5.1的時候有換成了int類型,所以在使用時必須注意   具體使用 \ 通過將系統的AIDL引入,還可以調用其他的方法來是顯示更多的功能。 在6.0上Google進一步開放了SIM卡相關的API我們可以使用SubscriptionManager這個API 這個使用管理類使用更簡單,類似於TelephonyManager。 獲取實例:\ 獲取默認數據卡信息:\ 獲取激活的SIM 卡數量: \ ,既然能獲得SIM卡的信息,那還有個重要的東西想要獲取,就是如何監聽兩張SIM的信號場強信息以及對應的基站鄰區信息。 在5.0以前這是無法做到的,因為5.0以前,PhoneStateListener這個方法只有一個不帶參數的構造函數,所以無法注冊監聽,但是到了5.0以後的版本就有了 \   但是一個大大的@hide就給你隔絕了監聽的可能。 而且連參數protected也加了@hide明顯是不對普通開發者開放的。 \   但是,我們都知道,反射是可以獲取到類的參數,當然也可以設置參數值。 具體設置方法,在繼承PhoneStateListener時實現構造函數 \ 並且在構造函數中對監聽進行設置。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved