Android開發之獲取手機SIM卡信息


      TelephonyManager是一個管理手機通話狀態、電話網絡信息的服務類。該類提供了大量的getXxx(),方法獲取電話網絡的相關信息。

TelephonyManager類概述:


    可用於訪問有關設備上的電話服務信息。

應用程序能夠使用這個類的方法來確定電話服務和狀態,以及訪問某些類型的用戶信息。應用程序還能夠注冊一個偵聽器以接收的電話狀態變化通知。

你不能直接實例化這個類;相反,你能夠通過Context.getSystemService(Context.TELEPHONY_SERVICE)方法還獲取初始化TelephonyManager實例。

須要注意的是訪問某些電話信息permission-protected。。你的應用程序應該獲得訪問手機位置和狀態的的一些權限。

TelephonyManager類提供的基本的方法:


 

Public Methods

int           

getCallState()

返回一個常數,表示設備上的呼叫狀態

CellLocation           

getCellLocation()

返回設備的當前位置。

int           

getDataActivity()

返回一個常數,表示活動的數據連接的類型。

int           

getDataState()

返回一個常數表示當前數據連接狀態 

String            

getDeviceId()

返回唯一的設備ID,比如,IMEI GSMMEID CDMA手機。

String           

getDeviceSoftwareVersion()

返回設備的軟件版本,比如,IMEI / SV GSM手機。

String           

getLine1Number()

返回1號線的電話號碼,比如。MSISDN用於GSM電話。

List<NeighboringCellInfo>       

getNeighboringCellInfo()

返回設備的相鄰小區信息。

String         

getNetworkCountryIso()

返回注冊的網絡運營商的國家代碼

String           

getNetworkOperator()

返回的MCC +跨國公司的注冊網絡運營商

String          

getNetworkOperatorName()

返回注冊的網絡運營商的名字

int          

getNetworkType()

返回一個常數,表示眼下在設備上使用的無線電技術(網絡類型)。

int          

getPhoneType()

返回設備的類型(手機制式)。

String          

getSimCountryIso()

 返回SIM卡運營商的國家代碼

String          

getSimOperator()

返回MCC +跨國公司(移動國家代碼+移動網絡代碼)提供者的SIM卡。

String          

getSimOperatorName()

返回服務提供者的名稱(SPN)

String          

getSimSerialNumber()

返回SIM卡的序列號,假設適用的話。

int          

getSimState()

返回一個常數表示SIM卡設備的狀態。

String          

getSubscriberId()

返回唯一的用戶ID,比如,IMSIGSM手機。

String          

getVoiceMailAlphaTag()

檢索與語音信箱號碼相關的字母標識符。

String          

getVoiceMailNumber()

返回語音信箱號碼。

boolean          

hasIccCard()

boolean          

isNetworkRoaming()

返回true,假設該設備被覺得是漫游當前網絡上,支持GSM目的。

void          

listen(PhoneStateListener listener, int events)

注冊一個偵聽器對象接收改變指定的電話狀態的通知。

 



 應用實例:

 執行效果圖:

TelephonyStatus類:


package com.jph.telephonystatus;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.telephony.TelephonyManager;
import android.widget.ListView;
import android.widget.SimpleAdapter;
/**
 * Describe:</br>
 * 獲取Sim卡信息
 * 本實例通過TelephonyManager類的對象的getXxx()
 * 方法獲取手機Sim卡信息。
 * @author jph
 * Date:2014.07.22 
 * */
public class TelephonyStatus extends Activity {
	ListView listShow;
	//創建一個tManager類的實例
	TelephonyManager tManager;
	//聲明一個表示Sim卡狀態名的數組
	String []statusName=new String[]{};
	//聲明一個表示Sim卡狀態值得集合
	ArrayList<String>statusValue=new ArrayList<String>();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		listShow=(ListView)findViewById(R.id.listShow);
		//獲取系統的tManager對象
		tManager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
		//獲取表示各種狀態名的數組
		statusName=getResources().getStringArray(R.array.statusName);
		//獲取表示sim卡狀態的的數組
		String simStatus[]=getResources().getStringArray(R.array.simStatus);
		//獲取表示手機類型的數組
		String phoneType[]=getResources().getStringArray(R.array.phoneType);
		//獲取設備編號
		statusValue.add(tManager.getDeviceId());
		//獲取設備類型
		statusValue.add(phoneType[tManager.getPhoneType()]);
		//獲取軟件版本號
		statusValue.add(tManager.getDeviceSoftwareVersion()==null?"未知"
				:tManager.getDeviceSoftwareVersion());
		//獲取設備當前位置
		statusValue.add(tManager.getCellLocation()==null? "未知"
				:tManager.getCellLocation().toString());
		//獲取設備呼叫狀態
		switch (tManager.getCallState()) {
		case TelephonyManager.CALL_STATE_IDLE:
			statusValue.add("空暇");
			break;
		case TelephonyManager.CALL_STATE_OFFHOOK:
			statusValue.add("正在通話");
			break;
		case TelephonyManager.CALL_STATE_RINGING:
			statusValue.add("等待接聽");
			break;
		default:
			break;
		}		
		//獲取電話號碼
		statusValue.add(tManager.getLine1Number());
		//獲取運營商的國家代碼
		statusValue.add(tManager.getNetworkCountryIso());
		//獲取運營商的名稱
		statusValue.add(tManager.getNetworkOperatorName());
		//獲取網絡類型
		statusValue.add(getNetworkType(tManager.getNetworkType()));	
		//獲取SPN
		statusValue.add(tManager.getSimOperatorName().equals("")?"未知"
				:tManager.getSimOperatorName());
		//獲取SIM卡的序列號
		statusValue.add(tManager.getSimSerialNumber());
		//獲取SIM卡狀態
		statusValue.add(simStatus[tManager.getSimState()]);
		List<Map<String, Object>> listItems=new ArrayList<Map<String,Object>>();		
		// 遍歷statusValues集合。將statusNames、statusValues
		// 的數據封裝到List<Map<String , String>>集合中
		for (int i = 0; i < statusName.length; i++) {
			Map<String, Object>listItem=new HashMap<String, Object>();
			listItem.put("name",statusName[i]);
			listItem.put("value",statusValue.get(i));
			listItems.add(listItem);
		}
		SimpleAdapter adapter=new SimpleAdapter(this, listItems, R.layout.line,
				new String[]{"name","value"},new int[]{R.id.txtName,R.id.txtValue});
		//為listShow設置Adapter
		listShow.setAdapter(adapter);
	}
	//獲取手機網絡類型
	private String getNetworkType(int networkType) {
		// TODO Auto-generated method stub		
		switch (networkType) {
		case TelephonyManager.NETWORK_TYPE_1xRTT:			
			return "1xRTT";
		case TelephonyManager.NETWORK_TYPE_CDMA:			
			return "CDMA";
		case TelephonyManager.NETWORK_TYPE_EDGE:			
			return "EDGE";
		case TelephonyManager.NETWORK_TYPE_EHRPD:			
			return "EHRPD";
		case TelephonyManager.NETWORK_TYPE_EVDO_0:			
			return "EVDO_0";
		case TelephonyManager.NETWORK_TYPE_EVDO_A:			
			return "EVDO_A";
		case TelephonyManager.NETWORK_TYPE_EVDO_B:			
			return "EVDO_B";
		case TelephonyManager.NETWORK_TYPE_GPRS:			
			return "GPRS";
		case TelephonyManager.NETWORK_TYPE_HSDPA:			
			return "HSDPA";
		case TelephonyManager.NETWORK_TYPE_HSPA:			
			return "HSPA";
		case TelephonyManager.NETWORK_TYPE_HSPAP:			
			return "HSPAP";
		case TelephonyManager.NETWORK_TYPE_HSUPA:			
			return "HSUPA";
		case TelephonyManager.NETWORK_TYPE_IDEN:			
			return "IDEN";
		case TelephonyManager.NETWORK_TYPE_LTE:			
			return "LTE";
		case TelephonyManager.NETWORK_TYPE_UMTS:			
			return "UMTS";
		case TelephonyManager.NETWORK_TYPE_UNKNOWN:			
			return "UNKNOWN";
		default:
			return "UNKNOWN";
		}		
	}
}
array.xml


<?

xml version="1.0" encoding="utf-8"?> <resources> <!-- 聲明一個名為statusName的數組 --> <string-array name="statusName"> <item>設備編號</item> <item>手機制式</item> <item>軟件版本號</item> <item>設備當前位置</item> <item>設備呼叫狀態</item> <item>電話號碼</item> <item>運營商的國家代碼</item> <item>運營商的名稱</item> <item>網絡類型</item> <item>SPN</item> <item>SIM卡的序列號</item> <item>SIM卡狀態</item> </string-array> <!-- 聲明一個名為phoneType的數組 --> <string-array name="phoneType"> <item>未知</item> <item>GSM</item> <item>CDMA</item> </string-array> <!-- 聲明一個名為simSatus的數組 --> <string-array name="simStatus"> <item>狀態未知</item> <item>無SIM卡</item> <item>被PIN加鎖</item> <item>被PUK加鎖</item> <item>被NetWork PIN加鎖</item> <item>已准備好</item> </string-array> </resources>


AndroidManifest.xml


<!-- 加入訪問手機位置的權限 -->
	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
	<!-- 加入訪問手機狀態的權限 -->
	<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
關於TelephonyManager其他實際應用可參照:Android開發之監聽手機來電



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM