如何读取SIM卡信息

TelephonyManager的应用

手机的最主要功用就是打电话,如果没有电信公司提供的SIM卡,就不能正常地拨打电话,那么,我们有什么方法可以取得SIM卡的状态及相关资料呢?

Android API中的TelephonyManager(Android.telephony.TelephonyManager)对象,提供了几个方法可以快速取得SIM卡的状态及相关信息。

效果图:


程序中以getSystemService(TELEPHONY_SERVICE)来取得TelephonyManager对象,以TelephonyManager提供的方法来取得SIM卡状态及相关信息,将取得的信息存入自定义的MyAdapter中,最后以setListAdapter()将MyAdpter内的信息显示于ListView中。

Java代码:

01.import android.telephony.TelephonyManager;

02.

03.public class EX05_18 extends ListActivity {

04.private TelephonyManager telMgr;

05.private List<String> item=new ArrayList<String>();

06.private List<String> value=new ArrayList<String>();

07.

08.@SuppressWarnings("static-access")

09.@Override

10.public void onCreate(Bundle savedInstanceState) {

11.super.onCreate(savedInstanceState);

12./* 载入main.xml Layout */

13.setContentView(R.layout.main);

14.telMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);

15./* 将取得的信息写入List中 */

16./* 取得SIM卡状态 */

17.item.add(getResources().getText(R.string.str_list0).toString());

18.if(telMgr.getSimState()==telMgr.SIM_STATE_READY) {

19.value.add("良好");

20.} else if(telMgr.getSimState()==telMgr.SIM_STATE_ABSENT) {

21.value.add("无SIM卡");

22.} else {

23.value.add("SIM卡被锁定或未知的状态");

24.}

25./* 取得SIM卡卡号 */

26.item.add(getResources().getText(R.string.str_list1).toString());

27.if(telMgr.getSimSerialNumber()!=null) {

28.value.add(telMgr.getSimSerialNumber());

29.} else {

30.value.add("无法取得");

31.}

32./* 取得SIM卡供货商代码 */

33.item.add(getResources().getText(R.string.str_list2).toString());

34.if(telMgr.getSimOperator().equals("")) {

35.value.add("无法取得");

36.} else {

37.value.add(telMgr.getSimOperator());

38.}

39./* 取得SIM卡供货商名称 */

40.item.add(getResources().getText(R.string.str_list3).toString());

41.if(telMgr.getSimOperatorName().equals("")) {

42.value.add("无法取得");

43.} else {

44.value.add(telMgr.getSimOperatorName());

45.}

46./* 取得SIM卡国别 */

47.item.add(getResources().getText(R.string.str_list4).toString());

48.if(telMgr.getSimCountryIso().equals("")) {

49.value.add("无法取得");

50.} else {

51.value.add(telMgr.getSimCountryIso());

52.}

53./* 使用自定义的MyAdapter来将数据传入ListActivity */

54.setListAdapter(new MyAdapter(this,item,value));

55.}

56.

57.}
复制代码
自定义的Adapter对象,以row_layout.xml作为Layout,程序中依照Layout的设置值来显示信息名称及信息内容。

Java代码:

01./* 自定义的Adapter,继承android.widget.BaseAdapter */

02.public class MyAdapter extends BaseAdapter {

03./* 变量声明 */

04.private LayoutInflater mInflater;

05.private List<String> items;

06.private List<String> values;

07./* MyAdapter的构造器,传入三个参数 */

08.public MyAdapter(Context context,List<String> item, List<String> value) {

09./* 参数初始化 */

10.mInflater = LayoutInflater.from(context);

11.itemitems = item;

12.valuevalues = value;

13.}

14./* 因继承BaseAdapter,需重写以下方法 */

15.@Override

16.public int getCount() {

17.return items.size();

18.}

19.

20.@Override

21.public Object getItem(int position) {

22.return items.get(position);

23.}

24.@Override

25.public long getItemId(int position) {

26.return position;

27.}

28.@Override

29.public View getView(int position,View convertView,ViewGroup par) {

30.ViewHolder holder;

31.if(convertView == null) {

32./* 使用自定义的file_row作为Layout */

33.convertView = mInflater.inflate(R.layout.row_layout,null);

34./* 初始化holder的text与icon */

35.holder = new ViewHolder();

36.holder.text1=(TextView)convertView.findViewById(R.id.myText1);

37.holder.text2=(TextView)convertView.findViewById(R.id.myText2);

38.convertView.setTag(holder);

39.} else {

40.holder = (ViewHolder) convertView.getTag();

41.}

42./* 设置要显示的信息 */

43.holder.text1.setText(items.get(position).toString());

44.holder.text2.setText(values.get(position).toString());

45.return convertView;

46.}

47./* class ViewHolder */

48.private class ViewHolder {

49./* text1:信息名称 * text2:信息内容 */

50.TextView text1;

51.TextView text2;

52.}

53.

54.}
复制代码
AndroidManifest.xml

AndroidManifest.xml本身必须要在Activity里设置读取电话状态的权限(Android.permission.READ_ PHONE_STATE)。

Java代码:

01.<uses-permission android:name="android.permission.READ_PHONE_STATE">
复制代码
在取得SIM卡的相关信息时,有时会因某些情况而取不到值。例如,手机没有插入SIM卡,这时候的返回值可能为null或空白字符串,所以在程序中添加空白与null的检查会是比较保险的做法,以免因此造成系统错误。
程序以TelephonyManager.getSimState()来取得SIM卡的状态,可能出现的返回状态如表
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值