android中判断sim卡状态和读取联系…

来源:互联网 发布:菜鸟网络加盟怎么赚钱 编辑:程序博客网 时间:2024/06/05 21:49
 在写程序中,有时候可能需要获取sim卡中的一些联系人资料。在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息。

     读取的代码如下:

 

复制代码
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 = "" 
       
    
 
    @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, nullnullnullnull);  
        
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> 
复制代码
原创粉丝点击