SIM的provider是IccProvider。既然是provider,就和操作Contact的provider类似的,只是有一些微小差别。

IccProvider的Uri是content://icc/and,可以通过这个Uri来操作SIM卡。当然,使用时需要转换为android的Uri对象。android中对SIM卡操作的支持很简单,具体的查询、插入、更新和删除操作如下面的代码段

一、查询联系人

查询时,只支持获取获取联系人,即query()函数的后面几个参数都为null(其它值不起作用)。同时,也不支持类似content://icc/and/0的查询。

public void SimQuery(Activity activity) {

Uri uri = Uri.parse("content://icc/adn");

Cursor cursor = activity.getContentResolver().query(uri, null, null,

null, null);

Log.d("1023", ">>>>>>" + cursor.getCount());

while (cursor.moveToNext()) {

String id = cursor.getString(cursor.getColumnIndex(People._ID));

String name = cursor.getString(cursor.getColumnIndex(People.NAME));

String phoneNumber = cursor.getString(cursor

.getColumnIndex(People.NUMBER));

Log.d("1023", ">>>>>>" + "_id, " + id);

Log.d("1023", ">>>>>>" + "name, " + name);

Log.d("1023", ">>>>>>" + "phone number, " + phoneNumber);

}

}

二、插入联系人

插入联系人只要设置名字和电话号码就可以了,要注意的是姓名对应的是tag,而不是name。

public void SimInsert(Activity activity) {

Uri uri = Uri.parse("content://icc/adn");

ContentValues values = new ContentValues();

values.put("tag", "Jones");

values.put("number", "10086");

Uri newSimContactUri = activity.getContentResolver()

.insert(uri, values);

Log.d("1023",

">>>>>>" + "new sim contact uri, "

+ newSimContactUri.toString());

}

三、更新联系人

更新联系人要注意的是,它是以原先的姓名和电话号码来匹配要更新的联系人的,故要指定4个属性。

public void SimUpdate(Activity activity) {

Uri uri = Uri.parse("content://icc/adn");

ContentValues values = new ContentValues();

values.put("tag", "Jones");

values.put("number", "10086");

values.put("newTag", "Fred");

values.put("newNumber", "10000");

activity.getContentResolver().update(uri, values, null, null);

}

四、删除联系人

删除联系人,同样是以名字和电话号码来匹配的,故需要在delete的where参数中指定,下面的例子演示了删除所有SIM卡内的联系人。

public void SimDelete(Activity activity) {

Uri uri = Uri.parse("content://icc/adn");

Cursor cursor = activity.getContentResolver().query(uri, null, null,

null, null);

Log.d("1023", ">>>>>> " + cursor.getCount());

while (cursor.moveToNext()) {

String name = cursor.getString(cursor.getColumnIndex(People.NAME));

String phoneNumber = cursor.getString(cursor

.getColumnIndex(People.NUMBER));

String where = "tag='" + name + "'";

where += " AND number='" + phoneNumber + "'";

activity.getContentResolver().delete(uri, where, null);

}

}

上面的代码段我都测过,可以放心使用。要使上面的例子成功,则需要添加到SIM卡上的联系人有不同的名字或电话号码,若是有相同的姓名和电话号,可能会带来问题,这一点我未测过。还有,要注意的是SIM卡和U盘一样容易坏,若读写次数较多,很可能会坏掉。


AndroidSIM卡信息

2012-2-24 09:20|发布者:benben|查看: 372|评论: 0

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

TelephonyManager的应用

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

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

View Code
  1 import android.telephony.TelephonyManager; 
2
3
4
5 public class EX05_18 extends ListActivity {
6
7 private TelephonyManager telMgr;
8
9 private List<String> item=new ArrayList<String>();
10
11 private List<String> value=http://www.cnblogs.com/weixing/archive/2012/02/23/new ArrayList<String>();
12
13
14
15 @SuppressWarnings("static-access")
16
17 @Override
18
19 public void onCreate(Bundle savedInstanceState) {
20
21 super.onCreate(savedInstanceState);
22
23 /* 载入main.xml Layout */
24
25 setContentView(R.layout.main);
26
27 telMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
28
29 /* 将取得的信息写入List中 */
30
31 /* 取得SIM卡状态 */
32
33 item.add(getResources().getText(R.string.str_list0).toString());
34
35 if(telMgr.getSimState()==telMgr.SIM_STATE_READY) {
36
37 value.add("良好");
38
39 } else if(telMgr.getSimState()==telMgr.SIM_STATE_ABSENT) {
40
41 value.add("SIM");
42
43 } else {
44
45 value.add("SIM卡被锁定或未知的状态");
46
47 }
48
49 /* 取得SIM卡卡号 */
50
51 item.add(getResources().getText(R.string.str_list1).toString());
52
53 if(telMgr.getSimSerialNumber()!=null) {
54
55 value.add(telMgr.getSimSerialNumber());
56
57 } else {
58
59 value.add("无法取得");
60
61 }
62
63 /* 取得SIM卡供货商代码 */
64
65 item.add(getResources().getText(R.string.str_list2).toString());
66
67 if(telMgr.getSimOperator().equals("")) {
68
69 value.add("无法取得");
70
71 } else {
72
73 value.add(telMgr.getSimOperator());
74
75 }
76
77 /* 取得SIM卡供货商名称 */
78
79 item.add(getResources().getText(R.string.str_list3).toString());
80
81 if(telMgr.getSimOperatorName().equals("")) {
82
83 value.add("无法取得");
84
85 } else {
86
87 value.add(telMgr.getSimOperatorName());
88
89 }
90
91 /* 取得SIM卡国别 */
92
93 item.add(getResources().getText(R.string.str_list4).toString());
94
95 if(telMgr.getSimCountryIso().equals("")) {
96
97 value.add("无法取得");
98
99 } else {
100
101 value.add(telMgr.getSimCountryIso());
102
103 }
104
105 /* 使用自定义的MyAdapter来将数据传入ListActivity */
106
107 setListAdapter(new MyAdapter(this,item,value));
108
109 }
110
111
112
113 }

更多相关文章

  1. 如何去掉Android(安卓)Studio顶部状态栏
  2. Android(安卓)获取联系人的号码的类型描述
  3. android 游戏框架SurfaceView
  4. android获取位置权限,手机状态权限,存储权限
  5. android 读取网络在传输数据时的状态
  6. android获得联系人问题
  7. Android中系统设置参数改变监听(以时间同步为例)
  8. android 沉浸式状态栏不会和虚拟重叠
  9. android 监听判断软键盘的弹出、隐藏状态

随机推荐

  1. 熔断器 Hystrix 源码解析 —— 断路器 Hy
  2. dubbo-go 白话文 | 从零搭建 dubbogo 和
  3. 页面审核工具 Chrome Lighthouse 简介[每
  4. linux系统操作系统网卡漂移解决方案及问
  5. 老大吩咐的可重入分布式锁,终于完美的实现
  6. 谁再悄咪咪的吃掉异常,我上去就是一 JIO
  7. 一只菜鸡的半年技术博客之路
  8. 从一份定义文件详解ELK中Logstash插件结
  9. linux系统重启操作系统后报错提示An erro
  10. 分布式消息队列 RocketMQ 源码分析 ——