android读取sim联系人资料的代码

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息。

PhoneTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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>