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

jopen 10年前發布 | 149K 次閱讀 Android Android開發 移動開發

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

TelephonyManager類概述:


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

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

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

TelephonyManager類提供的主要的方法:


 

Public Methods

</td> </tr>

int           

</td>

getCallState()

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

</td> </tr>

CellLocation           

</td>

getCellLocation()

返回設備的當前位置。

</td> </tr>

int           

</td>

getDataActivity()

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

</td> </tr>

int           

</td>

getDataState()

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

</td> </tr>

String            

</td>

getDeviceId()

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

</td> </tr>

String           

</td>

getDeviceSoftwareVersion()

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

</td> </tr>

String           

</td>

getLine1Number()

返回1號線的電話號碼,例如,MSISDN用于GSM電話。

</td> </tr>

List<NeighboringCellInfo>       

</td>

getNeighboringCellInfo()

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

</td> </tr>

String         

</td>

getNetworkCountryIso()

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

</td> </tr>

String           

</td>

getNetworkOperator()

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

</td> </tr>

String          

</td>

getNetworkOperatorName()

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

</td> </tr>

int          

</td>

getNetworkType()

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

</td> </tr>

int          

</td>

getPhoneType()

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

</td> </tr>

String          

</td>

getSimCountryIso()

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

</td> </tr>

String          

</td>

getSimOperator()

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

</td> </tr>

String          

</td>

getSimOperatorName()

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

</td> </tr>

String          

</td>

getSimSerialNumber()

返回SIM卡的序列號,如果適用的話。

</td> </tr>

int          

</td>

getSimState()

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

</td> </tr>

String          

</td>

getSubscriberId()

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

</td> </tr>

String          

</td>

getVoiceMailAlphaTag()

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

</td> </tr>

String          

</td>

getVoiceMailNumber()

返回語音信箱號碼。

</td> </tr>

boolean          

</td>

hasIccCard()

</td> </tr>

boolean          

</td>

isNetworkRoaming()

返回true,如果該設備被認為是漫游當前網絡上,支持GSM目的。

</td> </tr>

void          

</td>

listen(PhoneStateListener listener, int events)

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

</td> </tr> </tbody> </table>

 



 應用實例:

 運行效果圖:

20140722103354031.png

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";  
        }         
    }  
}  </pre><a href="/misc/goto?guid=4959555530927109906" target="_blank" title="派生到我的代碼片" style="text-indent:0;"></a></div>

</div> </div> 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>  
</div> </div>
AndroidManifest.xml

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
  • sesese色