Android学习笔记_SIM卡介绍
一、判断SIM卡属于哪个移动运营商
1、第一种方法:获取手机的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){
if(imsi.startsWith(\//因为移动网络编号46000下的IMSI已经用完,所以虚拟了一个46002编号,134/159号 段使用了此编号 //中国移动
}else if(imsi.startsWith(\//中国联通
}else if(imsi.startsWith(\//中国电信
} }
2、第二种方法:
TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String operator = telManager.getSimOperator(); if(operator!=null){
if(operator.equals(\//中国移动
}else if(operator.equals(\//中国联通
}else if(operator.equals(\//中国电信 } }
二、从SIM卡中获取联系人信息
1、可以通过内容提供者进行访问,下面是主要代码。 Uri uri = Uri.parse(\String[] projection = {\
Cursor cursor = managedQuery(uri, projection, null, null, \if(cursor!=null){
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex(\
String phone = cursor.getString(cursor.getColumnIndex(\} }
/*在文件AndroidManifest.xml中添加权限
package com.android.internal.telephony; import android.content.ContentProvider; import android.content.UriMatcher; import android.content.ContentValues; import com.android.internal.database.ArrayListCursor; import android.database.Cursor; import android.net.Uri; import android.os.SystemProperties; import android.os.RemoteException; import android.os.ServiceManager; import android.text.TextUtils; import android.util.Log; import java.util.ArrayList; import java.util.List; import com.android.internal.telephony.IccConstants; import com.android.internal.telephony.AdnRecord; import com.android.internal.telephony.IIccPhoneBook; public class IccProvider extends ContentProvider { private static final String TAG = \private static final boolean DBG = false; private static final String[] ADDRESS_BOOK_COLUMN_NAMES = new String[] { \ private static final int ADN = 1; private static final int FDN = 2; private static final int SDN = 3; private static final String STR_TAG = \private static final String STR_NUMBER = \private static final String STR_PIN2 = \ private static final UriMatcher URL_MATCHER = new UriMatcher( UriMatcher.NO_MATCH); static { URL_MATCHER.addURI(\URL_MATCHER.addURI(\URL_MATCHER.addURI(\} private boolean mSimulator; @Override public boolean onCreate() { String device = SystemProperties.get(\ if (!TextUtils.isEmpty(device)) { mSimulator = false; } else { // simulator mSimulator = true; } return true; } @Override public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs, String sort) { ArrayList results; if (!mSimulator) { switch (URL_MATCHER.match(url)) { case ADN: results = loadFromEf(IccConstants.EF_ADN); break; case FDN: results = loadFromEf(IccConstants.EF_FDN); break; case SDN: results = loadFromEf(IccConstants.EF_SDN); break; default: