读取的代码如下:
package com.android.test; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.telephony.TelephonyManager; import android.widget.TextView; public class PhoneTest extends Activity { private TextView mTextView; protected Cursor mCursor = null ; private TelephonyManager mTelephonyManager; private String mString = "" ; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); mTextView = (TextView)findViewById(R.id.text); mTextView.setTextSize( 20.3f ); isSimExist(); if (getSimState() == TelephonyManager.SIM_STATE_READY){ mString += " 卡存在\n " ; getSimContacts( " content://icc/adn " ); // 一般用这一条,如果这条不行的话可以试试下面的一条。 getSimContacts( " content://sim/adn " ); // 此种读法在我们手机里不能读取,所以,还是用上个uri比较好。 } mTextView.setText(mString); } private void getSimContacts(String str){ Intent intent = new Intent(); intent.setData(Uri.parse(str)); Uri uri = intent.getData(); mCursor = getContentResolver().query(uri, null , null , null , null ); if (mCursor == null ){ mString += " 不能从 " + str + " 读数据\n " ; return ; } mString += " 第一列: " + mCursor.getColumnName( 0 ) + " \n " ; mString += " 第二列: " + mCursor.getColumnName( 1 ) + " \n " ; mString += " 第三列: " + mCursor.getColumnName( 2 ) + " \n " ; mString += " 第四列: " + mCursor.getColumnName( 3 ) + " \n " ; mString += " 列数: " + mCursor.getColumnCount() + " \n " ; mString += " 行数: " + mCursor.getCount() + " \n " ; if (mCursor != null ) { while (mCursor.moveToNext()) { // 取得联系人名字 int nameFieldColumnIndex = mCursor.getColumnIndex( " name " ); mString += mCursor.getString(nameFieldColumnIndex) + " " ; // 取得电话号码 int numberFieldColumnIndex = mCursor .getColumnIndex( " number " ); mString += mCursor.getString(numberFieldColumnIndex) + " " ; // 取得邮箱 int emailsFieldColumnIndex = mCursor .getColumnIndex( " emails " ); mString += mCursor.getString(emailsFieldColumnIndex) + " " ; // 取得id int idFieldColumnIndex = mCursor .getColumnIndex( " _id " ); mString += mCursor.getString(idFieldColumnIndex) + " \n " ; } } mString += mCursor + " \n " ; mCursor.close(); } private int getSimState(){ return mTelephonyManager.getSimState(); } private void isSimExist(){ mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); int simState = mTelephonyManager.getSimState(); switch (simState) { case TelephonyManager.SIM_STATE_ABSENT: mString = " 无卡 " ; // do something break ; case TelephonyManager.SIM_STATE_NETWORK_LOCKED: mString = " 需要NetworkPIN解锁 " ; // do something break ; case TelephonyManager.SIM_STATE_PIN_REQUIRED: mString = " 需要PIN解锁 " ; // do something break ; case TelephonyManager.SIM_STATE_PUK_REQUIRED: mString = " 需要PUN解锁 " ; // do something break ; case TelephonyManager.SIM_STATE_READY: mString = " 良好 " ; // do something break ; case TelephonyManager.SIM_STATE_UNKNOWN: mString = " 未知状态 " ; // do something break ; } mTextView.setText(mString); } }
main.xml布局文件如下:
<? xml version="1.0" encoding="utf-8" ?> < LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:orientation ="vertical" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < ScrollView android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < LinearLayout android:orientation ="vertical" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > < TextView android:id ="@+id/text" android:layout_width ="fill_parent" android:layout_height ="wrap_content" android:text ="@string/hello" /> </ LinearLayout > </ ScrollView > </ LinearLayout >
同时还要在AndroidManefist.xml中添加读sim卡的权限,如下:
<? xml version="1.0" encoding="utf-8" ?> < manifest xmlns:android ="http://schemas.android.com/apk/res/android" package ="com.android.test" android:versionCode ="1" android:versionName ="1.0" > < application android:icon ="@drawable/icon" android:label ="@string/app_name" > < activity android:name =".PhoneTest" android:label ="@string/app_name" > < intent-filter > < action android:name ="android.intent.action.MAIN" /> < category android:name ="android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > </ application > < uses-permission android:name ="android.permission.READ_CONTACTS" ></ uses-permission > </ manifest >