Android判断SIM卡状态并读取SIM内容
来源:互联网 发布:韩国拍照软件 编辑:程序博客网 时间:2024/05/18 23:55
- 1.判断SIM卡状态
package com.zeph.android.sim;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import android.app.ListActivity;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class GetSIMinfoActivity extends ListActivity {
private TelephonyManager manager;
private List<String> item = new ArrayList<String>();
private List<String> value = new ArrayList<String>();
private ListView mListView;
private List<Map<String, Object>> mData = new ArrayList<Map<String, Object>>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mListView = getListView();
manager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
item.add("SIM卡状态");
switch (manager.getSimState()) {
case TelephonyManager.SIM_STATE_READY:
value.add("良好");
break;
case TelephonyManager.SIM_STATE_ABSENT:
value.add("无SIM卡");
break;
default:
value.add("SIM卡被锁定或未知状态");
break;
}
item.add("SIM卡序列号");
if (manager.getSimSerialNumber() != null)
value.add(manager.getSimSerialNumber());
else
value.add("无法取得");
item.add("SIM卡提供商代码");
if (manager.getSimOperator() != null)
value.add(manager.getSimOperator());
else
value.add("无法取得");
item.add("SIM卡提供商名称");
if (manager.getSimOperatorName() != null)
value.add(manager.getSimOperatorName());
else
value.add("无法取得");
item.add("SIM卡国别");
if (manager.getSimCountryIso() != null)
value.add(manager.getSimCountryIso());
else
value.add("无法取得");
Iterator<String> itItem = item.iterator();
Iterator<String> itValue = value.iterator();
while (itItem.hasNext() && itValue.hasNext()) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("item", itItem.next());
map.put("value", itValue.next());
mData.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(),
mData, R.layout.item_value, new String[] { "item", "value" },
new int[] { R.id.item, R.id.value });
mListView.setAdapter(adapter);
}
}
2.读取SIM卡信息android读取sim卡联系人
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盘一样容易坏,若读写次数较多,很可能会坏掉。3.实例
[代码] PhoneTest.java
view sourceprint?
001
package com.android.test;
002
003
import android.app.Activity;
004
import android.content.Context;
005
import android.content.Intent;
006
import android.database.Cursor;
007
import android.net.Uri;
008
import android.os.Bundle;
009
import android.telephony.TelephonyManager;
010
import android.widget.TextView;
011
012
public class PhoneTest extends Activity {
013
private TextView mTextView;
014
protected Cursor mCursor = null;
015
private TelephonyManager mTelephonyManager;
016
private String mString = "";
017
018
/** Called when the activity is first created. */
019
@Override
020
public void onCreate(Bundle savedInstanceState) {
021
super.onCreate(savedInstanceState);
022
setContentView(R.layout.main);
023
mTextView = (TextView)findViewById(R.id.text);
024
mTextView.setTextSize(20.3f);
025
isSimExist();
026
if(getSimState() == TelephonyManager.SIM_STATE_READY){
027
mString += " 卡存在\n";
028
getSimContacts("content://icc/adn"); //一般用这一条,如果这条不行的话可以试试下面的一条。
029
getSimContacts("content://sim/adn");//此种读法在我们手机里不能读取,所以,还是用上个uri比较好。
030
}
031
mTextView.setText(mString);
032
}
033
034
private void getSimContacts(String str){
035
Intent intent = new Intent();
036
intent.setData(Uri.parse(str));
037
Uri uri = intent.getData();
038
mCursor = getContentResolver().query(uri, null, null, null, null);
039
if(mCursor == null){
040
mString += "不能从" + str + "读数据\n";
041
return ;
042
}
043
mString += "第一列:" + mCursor.getColumnName(0) + "\n";
044
mString += "第二列:" + mCursor.getColumnName(1) + "\n";
045
mString += "第三列:" + mCursor.getColumnName(2) + "\n";
046
mString += "第四列:" + mCursor.getColumnName(3) + "\n";
047
mString += "列数:" + mCursor.getColumnCount() + "\n";
048
mString += "行数:" + mCursor.getCount() + "\n";
049
if (mCursor != null) {
050
while (mCursor.moveToNext()) {
051
// 取得联系人名字
052
int nameFieldColumnIndex = mCursor.getColumnIndex("name");
053
mString += mCursor.getString(nameFieldColumnIndex)+" ";
054
// 取得电话号码
055
int numberFieldColumnIndex = mCursor
056
.getColumnIndex("number");
057
mString += mCursor.getString(numberFieldColumnIndex)+" ";
058
// 取得邮箱
059
int emailsFieldColumnIndex = mCursor
060
.getColumnIndex("emails");
061
mString += mCursor.getString(emailsFieldColumnIndex)+" ";
062
// 取得id
063
int idFieldColumnIndex = mCursor
064
.getColumnIndex("_id");
065
mString += mCursor.getString(idFieldColumnIndex)+"\n";
066
}
067
}
068
mString += mCursor + "\n";
069
mCursor.close();
070
}
071
072
private int getSimState(){
073
return mTelephonyManager.getSimState();
074
}
075
076
private void isSimExist(){
077
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
078
int simState = mTelephonyManager.getSimState();
079
080
switch (simState) {
081
082
case TelephonyManager.SIM_STATE_ABSENT:
083
mString = "无卡";
084
// do something
085
break;
086
087
case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
088
mString = "需要NetworkPIN解锁";
089
// do something
090
091
break;
092
093
case TelephonyManager.SIM_STATE_PIN_REQUIRED:
094
mString = "需要PIN解锁";
095
// do something
096
break;
097
098
case TelephonyManager.SIM_STATE_PUK_REQUIRED:
099
mString = "需要PUN解锁";
100
// do something
101
break;
102
103
case TelephonyManager.SIM_STATE_READY:
104
mString = "良好";
105
// do something
106
break;
107
108
case TelephonyManager.SIM_STATE_UNKNOWN:
109
mString = "未知状态";
110
// do something
111
break;
112
}
113
mTextView.setText(mString);
114
}
115
116
}
[代码] main.xml
01
<?xml version="1.0" encoding="utf-8"?>
02
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03
android:orientation="vertical"
04
android:layout_width="fill_parent"
05
android:layout_height="fill_parent"
06
>
07
<ScrollView android:layout_width="fill_parent"
08
android:layout_height="fill_parent">
09
<LinearLayout android:orientation="vertical"
10
android:layout_width="fill_parent"
11
android:layout_height="fill_parent">
12
<TextView android:id="@+id/text"
13
android:layout_width="fill_parent"
14
android:layout_height="wrap_content"
15
android:text="@string/hello"
16
/>
17
</LinearLayout>
18
</ScrollView>
19
</LinearLayout>
[代码] AndroidManefist.xml
01
<?xml version="1.0" encoding="utf-8"?>
02
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
03
package="com.android.test"
04
android:versionCode="1"
05
android:versionName="1.0">
06
07
08
<application android:icon="@drawable/icon"android:label="@string/app_name">
09
<activity android:name=".PhoneTest"
10
android:label="@string/app_name">
11
<intent-filter>
12
<action android:name="android.intent.action.MAIN" />
13
<category android:name="android.intent.category.LAUNCHER" />
14
</intent-filter>
15
</activity>
16
17
</application>
18
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
19
</manifest>
关于我们 |联系我们 |广告服务 |投资合作 |版权申明 |在线帮助 |网站地图 |作品发布 |Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站
- Android 判断 SIM卡 状态 并 读取 SIM卡 内容
- Android判断SIM卡状态并读取SIM内容
- 【SIM】Android判断SIM卡状态并读取SIM卡内容
- Android - 判断SIM卡状态
- android中判断sim卡状态和读取联系…
- Android读取sim卡的状态
- android中判断SIM卡状态
- android判断手机SIM状态
- android SIM卡状态
- android SIM卡状态
- android中判断sim卡状态和读取联系人资料的方法
- android中判断sim卡状态和读取联系人资料的方法
- android中判断sim卡状态和读取联系人资料的方法
- 读取SIM卡的状态、sim卡网络
- Android 获取SIM卡状态
- Android获取SIM卡状态
- android获取SIM卡状态
- Android-获取sim卡状态
- oracle动态监听和静态监听的区别
- 一个电子书网站(一)
- kibana对接elasticsearch集群中的多个节点
- Git的Patch功能
- 网易校招编程题 计算糖果
- Android判断SIM卡状态并读取SIM内容
- JS操作cookie
- Android 使用Parcelable序列化对象
- 【Excel】java 导出Excel 中文文件名乱码不显示问题
- 第四周项目3-单链表应用(3)
- error LNK2005: ___xc_a already defined in msvcrt.lib(cinitexe.obj)
- 309. Best Time to Buy and Sell Stock with Cooldown
- 第四周 单链表的应用(3)
- git分支管理策略