讀取SIM卡的狀態理論說明

2021-06-16 19:44:54 字數 3871 閱讀 4960

手機的最主要功用就是打**,如果沒有電信公司提供的sim卡,就不能正常地撥打**,那麼,我們有什麼方法可以取得sim卡的狀態及相關資料呢?

android api中的telephonymanager(android.telephony.telephonymanager)物件,提供了幾個方法可以快速取得sim卡的狀態及相關資訊。

程式中以getsystemservice(telephony_service)來取得telephonymanager物件,以telephonymanager提供的方法來取得sim卡狀態及相關資訊,將取得的資訊存入自定義的myadapter中,最後以setlistadapter()將myadpter內的資訊顯示於listview中。自定義的adapter物件,以row_layout.xml作為layout,程式中依照layout的設定值來顯示資訊名稱及資訊內容。

androidmanifest.xml

androidmanifest.xml本身必須要在activity裡設定讀取**狀態的許可權(android.permission.read_ phone_state)。

在取得sim卡的相關資訊時,有時會因某些情況而取不到值。例如,手機沒有插入sim卡,這時候的返回值可能為null或空白字串,所以在程式中新增空白與null的檢查會是比較保險的做法,以免因此造成系統錯誤。

程式以telephonymanager.getsimstate()來取得sim卡的狀態,可能出現的返回狀態如表

效果圖:

android 獲取sim卡運營商資訊

telephonymanager tm = (telephonymanager)context.getsystemservice(context.telephony_service); telephonymanager 的使用 telephonymanager 提供裝置上獲取通訊服務資訊的入口,應用程式使用這個類的方法來獲取**的服務商或者狀態。程式也可以註冊乙個***來監聽**狀態的改變。不需要直接例項化這個類,使用context.getsystemservice(context.telephony_service)來獲取這個類的例項。

注意:一些**資訊需要相應的許可權。方法無效

getsimoperatorname() returns the service provider name (spn). // 獲取服務提供商名字,比如電信,聯通,移動用下面的方法。

第一種方法: 獲取手機的imsi碼,並判斷是中國移動\中國聯通\中國電信

telephonymanager telmanager = (telephonymanager) getsystemservice(context.telephony_service);

/** 獲取sim卡的imsi碼 * sim卡唯一標識:imsi 國際移動使用者識別碼(imsi:international mobile subscriber identification number)是區別移動使用者的標誌, * 儲存在sim卡中,可用於區別移動使用者的有效資訊。

imsi由mcc、mnc、msin組成,其中mcc為移動國家號碼,由3位數字組成, * 唯一地識別移動客戶所屬的國家,我國為460;mnc為網路id,由2位數字組成, * 用於識別移動客戶所歸屬的流動網路,中國移動為00,中國聯通為01,中國電信為03;

msin為移動客戶識別碼,採用等長11位數字構成。 *

唯一地識別國內gsm移動通訊網中移動客戶。所以要區分是移動還是聯通,只需取得sim卡中的mnc欄位即可 */

string imsi = telmanager.getsubscriberid();

if(imsi!=null)else if(imsi.startswith(「46001″))else if(imsi.startswith(「46003″)) }

第二種方法

telephonymanager telmanager = (telephonymanager) getsystemservice(context.telephony_service); string operator = telmanager.getsimoperator();

if(operator!=null)else if(operator.equals(「46001″))else if(operator.equals(「46003″)) }

在檔案androidmanifest.xml中新增許可權其他方法具體使用方法請檢視api 文件telephonymanager中方法說明。

在檔案 androidmanifest.xml 中新增許可權

telephonymanager tel = (telephonymanager) context .getsystemservice(context.telephony_service);

string simoperator = tel.getsimoperator();

imsi共有15位,其結構如下: mcc+mnc+min mcc:mobile country code,移動國家碼,共3位,中國為460; mnc:mobile network code,流動網路碼,共2位,電信03,移動02,聯通gsm 01,乙個典型的imsi號碼為460030912121001; min共有10位,其結構如下: 09+m0m1m2m3+abcd 其中的m0m1m2m3和mdn號碼中的h0h1h2h3可存在對應關係,abcd四位為自由分配。可以看出imsi在min號碼前加了mcc,可以區別出每個使用者的來自的國家,因此可以實現國際漫遊。在同乙個國家內,如果有多個cdma運營商,可以通過mnc來進行區別.

功能                          說明

getcelllocation() 返回的單元格位置的裝置 access_coarse_location或access_fine_location

getdeviceid() 返回的imei / meid的裝置。 如果該裝置是gsm裝置然後imei號將被退回,如果該裝置是乙個cdma裝置然後meid 將被退回 read_phone_state

getline1number() 返回裝置的**號碼(msisdn號碼) read_phone_state

getnetworkoperatorname() 返回註冊的網路運營商的名字

getnetworkoperator() 返回的mcc +跨國公司的註冊網路運營商

getnetworkcountryiso() 返回註冊的網路運營商的國家**

getsimcountryiso() 返回sim卡運營商的國家** read_phone_state

getsimoperator() 返回sim卡運營商的單個核細胞數+冶 read_phone_state

getsimoperatorname() 返回sim卡運營商的名字 read_phone_state

getsimserialnumber() 返回sim卡的序列號 read_phone_state

getnetworktype() 返回網路裝置可用的型別。 這將是下列其中乙個值:

telephonymanager.network_type_unknown telephonymanager.network_type_gprs telephonymanager.network_type_edge telephonymanager.network_type_umts read_phone_state getphonetype() 返回裝置的型別。 這將是以下值之一: telephonymanager.phone_type_none telephonymanager.phone_type_gsm telephonymanager.phone_type_cdma read_phone_state getsubscriberid() 返回使用者識別碼(的imsi)的裝置 read_phone_state

getneighboringcellinfo() 返回neighboringcellinfo類代表名單相鄰小區的資訊,如果可用,否則將返回null access_coarse_updates

雙SIM卡,Android監聽SIM卡狀態

最近在搞乙個專案,其中有一塊關於雙sim卡狀態監聽,在這一塊上沒有經驗,在網上找了很多例子,但都是只是監聽sim卡改變狀態,而我要的是不但要監聽sim狀態改變,而且還要知道具體是哪張sim卡狀態改變,度娘找尋好久後,還是沒有結果,於是便自行來研究下。首先,sim卡狀態改變的action是androi...

90 s1 sim卡狀態監控

監控sim卡,sim卡沒有繫結就阻止下一步的操作 package com.ldw.safe.activity import android.content.intent import android.content.sharedpreferences import android.os.bundle...

SIM卡 USIM卡 UICC卡 eSIM卡的區別

comprion公司的測試用sim卡 現在的3g與4g移動系統裡,準確地說sim是乙個應用的概念,承載sim應用的這張物理卡的名稱是uicc universal integrated circuit card 一張uicc卡可以同時包括多種邏輯應用,例如使用者標識模組 sim 通用使用者標識模組 u...