android中判断sim卡状态和读取联系人资料的方法
在写程序中,有时候可能需要获取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卡状态和读取联系人资料的方法的更多相关文章
- 十九、android中判断sim卡状态和读取联系人资料的方法
在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. Pho ...
- 017 Android 获取手机SIM卡序列号和读取联系人
1.获取手机SIM卡序列号 //5.存储sim卡系列号 //5.1获取sim卡系列号 TelephonyManager manager = (TelephonyManager) getSystemSe ...
- TelephonyManager类:Android手机及Sim卡状态的获取
TelephonyManager这个类很有用,可以得到很多关于手机和Sim卡的信息. 直接上注释后的代码,请享用 package net.sunniwell.app;import android.ap ...
- Android本机号码及Sim卡状态的获取
SIM卡存储的数据可分为四类:第一类是固定存放的数据.这类数据在移动电话机被出售之前由SIM卡中心写入,包括国际移动用户识别号(IMSI).鉴权密钥(KI).鉴权和加密算法等等.第二类是暂时存放的有关 ...
- Android ExpandableListView使用+获取SIM卡状态信息
ExpandableListView 是一个可以实现下拉列表的控件,大家可能都用过QQ,QQ中的好友列表就是用ExpandableListView实现的,不过它是自定义的适配器.本篇 博客除了要介绍E ...
- Android(java)学习笔记183:判断SD卡状态和存储空间大小
当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String status = Environment.g ...
- Android记录3--ExpandableListView使用+获取SIM卡状态信息
Android记录3--ExpandableListView使用+获取SIM卡状态信息 2013年8月9日Android记录 ExpandableListView是一个可以实现下拉列表的控件,大家可能 ...
- Android(java)学习笔记126:判断SD卡状态和SD卡容量
1. 判断SD卡状态和SD卡存储空间大小 当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String s ...
- Android中判断网络连接是否可用及监控网络状态
Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...
随机推荐
- 提问:"~"运算符
本人有一段代码关于"~"运算符 public class m{ public static void main(String[] args){ int x=~5; System.o ...
- DouNet学习_收发邮件
一.收发邮件 --->第一步:发邮件首先要有发送者的邮箱地址和登录的密码才能发送 这些都写在APP里 不要写死 --->第二步:发邮件就要有网络,要添加net.Mail命名空间 要发送的 ...
- arm tiny6410双网卡桥接问题
这几天做实验,想用arm tiny6410板子做个mesh网络节点.该板子本身自带一个lan网卡,我自己配了一个tp-link的usb无线网卡.其中wlan网卡工作在adhoc模式下,作为mesh骨干 ...
- 事件委托(event delegation)
事件委托给我带来的第一印象是,如果可以的话请尝试得经常使用它,性能好! 通过字符串拼接后,并进行DOM插入,不会复制事件,此时需要进行事件委托了!!! 优点 事件委托对于web应用程序的性能有如下几个 ...
- 解决Windows时间同步失败问题!系统时间同步设置!
使用NTP协议可以让你的计算机自动与服务器上的时间同步.从而保持最准确的时间. 中国国家授时中心的IP地址是:210.72.145.44 (至少我一直没ping通) 在Windows XP/2000/ ...
- A - Oulipo
A - Oulipo Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit S ...
- jquery easyui datagraid 对象显示的方法与datagraid、分页、复选框多选的数据显示
========================jsp==============================<table id="dg" fit="true& ...
- 行为类模式(一):职责链(Chain Of Responsibility)
定义 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. UML 优点 将请求的发送者和接收者解耦 可以 ...
- oracle 学习笔记--用户管理
oracle 用户管理 创建用户(需要具有dba权限的用户) create user 用户名 identified by 密码 defaule tablespace users //默认表空间 ...
- 获取某几个分类下的前N条数据 mssql语句
方案1: (SELECT top 10 * FROM 表 where type=3 ) UNION ALL (SELECT top 10 * FROM 表 where type=4 ) ...