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

PhoneTest.java
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
<?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>

android中判断sim卡状态和读取联系人资料的方法的更多相关文章

  1. 十九、android中判断sim卡状态和读取联系人资料的方法

    在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. Pho ...

  2. 017 Android 获取手机SIM卡序列号和读取联系人

    1.获取手机SIM卡序列号 //5.存储sim卡系列号 //5.1获取sim卡系列号 TelephonyManager manager = (TelephonyManager) getSystemSe ...

  3. TelephonyManager类:Android手机及Sim卡状态的获取

    TelephonyManager这个类很有用,可以得到很多关于手机和Sim卡的信息. 直接上注释后的代码,请享用 package net.sunniwell.app;import android.ap ...

  4. Android本机号码及Sim卡状态的获取

    SIM卡存储的数据可分为四类:第一类是固定存放的数据.这类数据在移动电话机被出售之前由SIM卡中心写入,包括国际移动用户识别号(IMSI).鉴权密钥(KI).鉴权和加密算法等等.第二类是暂时存放的有关 ...

  5. Android ExpandableListView使用+获取SIM卡状态信息

    ExpandableListView 是一个可以实现下拉列表的控件,大家可能都用过QQ,QQ中的好友列表就是用ExpandableListView实现的,不过它是自定义的适配器.本篇 博客除了要介绍E ...

  6. Android(java)学习笔记183:判断SD卡状态和存储空间大小

    当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String status = Environment.g ...

  7. Android记录3--ExpandableListView使用+获取SIM卡状态信息

    Android记录3--ExpandableListView使用+获取SIM卡状态信息 2013年8月9日Android记录 ExpandableListView是一个可以实现下拉列表的控件,大家可能 ...

  8. Android(java)学习笔记126:判断SD卡状态和SD卡容量

    1. 判断SD卡状态和SD卡存储空间大小 当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String s ...

  9. Android中判断网络连接是否可用及监控网络状态

    Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...

随机推荐

  1. Spinlock

    Spinlock From Wikipedia, the free encyclopedia This article needs additional citations for verificat ...

  2. 判断浏览器是IE的几种方式

    <script> if(!+[1,])alert("这是ie浏览器"); else alert("这不是ie浏览器"); </script&g ...

  3. Hadoop学习记录(1)|伪分布安装

    本文转载自向着梦想奋斗博客 Hadoop是什么? 适合大数据的分布式存储于计算平台 不适用小规模数据 作者:Doug Cutting 受Google三篇论文的启发 Hadoop核心项目 HDFS(Ha ...

  4. js运动 分享到

    <!doctype html> <html> <head> <meta charset = "utf-8"> <title&g ...

  5. bool?

    public class GuestResponse { [Required(ErrorMessage = "Please enter your name")] public st ...

  6. windos系统快捷键 2015-05-08 23:31 24人阅读 评论(0) 收藏

    WIN7的向上按钮消失了,但是它的快捷键没有消失: Alt + ↑: 文件夹的后退前进 Alt +← 和Alt →: 切换到上个操作的窗口Alt +Esc: 版权声明:本文为博主原创文章,未经博主允许 ...

  7. python开发vim插件

    [python开发vim插件] 按如下方式使用python开发vim插件,注意调用时使用的是exec. 但在函数中嵌入python代码更为简便,如下: python如何传递参数给python: 代码头 ...

  8. Linux top和负载的解释

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. top - 01:06:48 up  1:22,   ...

  9. C# JackLib系列之Form窗体的ShowWithoutActivation属性及其作用

    代码改变世界! 如果要显示顶级窗口,但又不希望由于将输入焦点从当前窗口移开而中断用户的工作,请使用此属性.它可以是一个信息性弹出窗口或浮动窗口,如“画图”应用程序中的“工具”调色板. 由于此属性为只读 ...

  10. zendstudio 出现failed to create the java machine转

    是因为配置java虚拟机内存太小 打开zend for eclipse 10.5时报了个错: failed to create the java virtual machine google了一下,解 ...