在写程序中,有时候可能需要获取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 = "";
/** 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>
以后一定会用到。。

android中判断sim卡状态和读取联系人资料的方法相关推荐

  1. android 监听sim卡状态,android中判断sim卡状态和读取联系人资料的方法

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

  2. android判断存储卡,Android中判断SD卡状态

    String status = Environment.getExternalStorageState(); if (status.equalsIgnoreCase(Environment.MEDIA ...

  3. android telephonymanager 电话状态,TelephonyManager类:Android手机及Sim卡状态的获取

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

  4. android sim 状态,Android - 判断SIM卡状态

    Android判断SIM卡状态, 是否插入SIM卡. 例如: 根据SIM判断优先使用的网络类型. SIM卡状态 /** * 判断是否包含SIM卡 * * @return 状态 */ public st ...

  5. android中对sim卡联系人的增删改查以及监听sim卡联系数据的改变

    sim卡联系人的增删改查主要是通过ContentProvider来进行操作的,在android中对sim卡联系人操作的provider是定义在IccProvider.java这个类中的,这个类位于an ...

  6. android监听卡1电话,Android 监听 SIM 卡状态

    判断是否包含 SIM 卡 /** * 判断是否包含SIM卡 * * @return 状态 */ public static boolean hasSimCard(Context context) { ...

  7. 获取手机号码/判断Sim卡状态

    /** * 获取手机中的电话号码 * @param Activity */ public void getName(Activity activity) { Cursor cursor = getCo ...

  8. 双SIM卡,Android监听SIM卡状态

    最近在搞一个项目,其中有一块关于双SIM卡状态监听,在这一块上没有经验,在网上找了很多例子,但都是只是监听SIM卡改变状态,而我要的是不但要监听SIM状态改变,而且还要知道具体是哪张SIM卡状态改变, ...

  9. android sim卡状态改变广播,android – 如何监控SIM卡状态的变化

    当SIM状态改变时,意图android.intent.action.SIM_STATE_CHANGED被广播.例如,在我的HTC Desire配有T-Mobile SIM卡的情况下,如果我将设备置于飞 ...

最新文章

  1. ESXi主机遗忘密码重置密码
  2. JavaScript实现找出买卖股票的最大利润算法(附完整源码)
  3. jQuery经典案例【倒计时】
  4. 【干货】网易严选大数据架构.pdf(附下载链接)
  5. 【论文解读】基于边界感知神经网络进行嵌套命名实体识别
  6. 114.二叉树展开为链表
  7. 基于TensorFlow实现自定义层的项目代码
  8. 快速开发微信小程序直播--微信直播--小程序直播开发
  9. 笔记本电脑配置知识大全
  10. uniapp快速入门开发
  11. vue给div绑定keyup的enter事件实现接电话(结合阿里云软电话SDK)
  12. Git与GitHub基础全套完整版教程(持续更新....)
  13. 正点原子stmf103zet6代码移植为stm32f103c8t6(库函数版)
  14. 2019年年终总结~平淡生活
  15. cj.exceptions.CJException: Access denied for user XX to database 问题解决记录
  16. 计算机辅助培训的策略,宁波诺丁汉大学学习策略培训对解决计算机辅助语言教学环境下信息过剩问题的启示...
  17. 042期正版四字梅花诗:冰清一洁
  18. 工科硕士毕业14年,谈谈我的经验教训
  19. linux系统的启动流程
  20. VBE_INFO(获取VBE信息)

热门文章

  1. Nebula:Slack 的覆盖全球性的开源网络
  2. 英特尔开源WebRTC开发套件OWT
  3. 美国36%流量背后 Netflix CDN分发算法优化
  4. ubuntu 16.04 apt源使用阿里云镜像
  5. Java并发编程举例Runnable, Callable, Future, FutureTask, CompletionService
  6. Error: Could not open client transport with JDBC Uri: jdbc:hive2://henu2:10000: java.n et.ConnectExc
  7. javaSE各阶段练习题--初识Java章节
  8. 数据结构: 试用判定树的方法给出在中序线索化二叉树上: (1) 如何搜索指定结点的在中序下的后继。 (2) 如何搜索指定结点的在前序下的后继。(3) 如何搜索指定结点的在后序下的后继。
  9. 详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用
  10. C/C++中输入带空格的字符串 string 转 char*