1.获取手机SIM卡序列号

//5.存储sim卡系列号
//5.1获取sim卡系列号
TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
//以下if内容为自动生成
if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
String simSerialNumber=manager.getSimSerialNumber();

2.读取系统联系人

系统联系人提供了一个内容提供者,通过内容解析器,匹配Url地址
(1)内容解析器
(2)Url地址,查看系统联系人数据库,内容提供者源码
先看清单文件
后看java类(联系人数据库有多张表)

Uri地址格式:contents://com.android.contacts/表名

获取联系人数据库:

data--->data--->com.android.providers.contacts--->database---->contacts2.db

(3)系统联系人数据库中有3张核心表,表结构
<1>raw_contacts 联系人表: contact_id 联系人唯一性id值
<2>data 用户信息表:raw_contact_id作为外键,和raw_contacts中contact_id做关联查询
获取data1字段,包含了电话号码以及联系人名称
mimetype_id字段,包含了当前行data1对应的数据类型
<3>mimetypes 类型表: 获取data表中mimetype_id和mimetypes中_id做关联查询,获取指向的信息类型
电话号码:vnd.android.cursor.item/phone_v2
用户名称:vnd.android.cursor.item/name

google公司提供:data表和mimetypes生成了一个视图
(4)表的访问方式(Uri)
content://com.android.contacts/raw_contacts
content://com.android.contacts/data

(5)源码

  /**
* 获取系统联系人数据方法
*/
private void initData() {
//读取联系人,可能是一个耗时操作,最好放到一个子线程中处理
new Thread(){
@Override
public void run() {
//1.获取内容解析器对象
ContentResolver contentResolver=getContentResolver();
//2.查询系统联系人数据库(添加权限)
//参数1:raw_contacts表的访问路径,参数2(projection):查询的字段,参数3:查询条件,参数5:排序方式
Cursor cursor=contentResolver.query(Uri.parse("content://com.android.contacts/raw_contacts"),
new String[]{"contact_id"},
null,
null,
null
);
contactsList.clear();
//3.循环游标,直到没有数据为止(循环一次,读取一个联系人的姓名和电话号码)
while (cursor.moveToNext()){
String id=cursor.getString(0);
//Log.i(tag,"id:"+id);
//4.根据用户唯一性id值,查询data表和mimetype表生成的视图,获取data和mimetype字段
Cursor indexCursor=contentResolver.query(Uri.parse("content://com.android.contacts/data"),
new String[]{"data1","mimetype"},
"raw_contact_id=?",
new String[]{id},
null);
HashMap<String,String> hashMap=new HashMap<>();
//5.循环获取每一个联系人的电话号码以及姓名、数据类型
while (indexCursor.moveToNext()){
Log.i(tag,"data="+indexCursor.getString(0));
Log.i(tag,"mimetype="+indexCursor.getString(1));
//6.区分数据类型给hashMap填充数据
String data=indexCursor.getString(0);
String type=indexCursor.getString(1);
if(type.equals("vnd.android.cursor.item/phone_v2")){
if(!TextUtils.isEmpty(data)){
hashMap.put("phone",data);
}
}else if(type.equals("vnd.android.cursor.item/name")){
if(!TextUtils.isEmpty(data)){
hashMap.put("name",data);
}
}
}
indexCursor.close();
contactsList.add(hashMap); //将hashmap值存放到list中
}
cursor.close();
//7.消息机制
System.out.println(tag+contactsList);
handler.sendEmptyMessage(0); //告诉主线程数据已经准备好了
}
}.start();
}

017 Android 获取手机SIM卡序列号和读取联系人的更多相关文章

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

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

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

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

  3. Android 获取手机SIM卡运营商

    直接上代码: /** * 获取SIM卡运营商 * * @param context * @return */ public static String getOperators(Context con ...

  4. Android开发之获取手机SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类.该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于訪问有关设 ...

  5. 【工具类】获取手机sim卡的运营商

    加入权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" /> package ...

  6. Android 获取手机SIM资料详解

    TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法.其中包括手机SIM的状态和信息.电信网络的状态及手机用户的信息.在应用程序中可以使用这些get方法获取 ...

  7. Android 手机卫士--绑定sim卡序列号

    现在开始具体 处理每一个导航页面的逻辑,首先看第二个导航页 本文地址:http://www.cnblogs.com/wuyudong/p/5949775.html,转载请注明出处. 这里需要实现绑定s ...

  8. 获取sim卡序列号

    //获取sim卡序列号TelephoneManager TelephonyManager manager = (TelephonyManager)getSystemService(Context.TE ...

  9. Android获取手机设备识别码(IMEI)和手机号码

    最近看了下获取手机设备ID和手机信息以及SIM的信息例子,主要还是借鉴别人的,现在自己写一下,算是巩固加深了,也希望能给大家一个参考 必要的条件还是一部真机,SIM卡或者UIM卡. 首先,在Andro ...

随机推荐

  1. 【知识点】同样是消息队列,Kafka凭什么速度那么快?

    同样是消息队列,Kafka凭什么速度那么快? 作者 | MrZhangxd Kafka的消息是保存或缓存在磁盘上的,一般认为在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间,但是实际上,Kafk ...

  2. C语言的柔性数组的实现及应用

    c编程的时候数组长度一般都是固定好的,实际上c还能实现变长数组.其实c99中确实是有变长数组的说法,C99中通过允许结构体中的最后一个成员是长度未知的数组实现变长数组,其定义格式如下: typedef ...

  3. elementUI 列表里面含有多选框,当翻页的时候依然保持之前页多选不变

    el-table的type="selection"的使用 场景:el-table,type="selection"时,重新请求后,设置列表更新前的已勾选项 踩坑 ...

  4. Android访问WCF服务

    原文链接:http://www.cnblogs.com/VinC/archive/2011/02/24/1964049.html 本章目的: 用Wcf建立可以上Android可以访问的数据服务, 数据 ...

  5. openresty开发系列23--lua面向对象

    openresty开发系列23--lua面向对象 面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构.java,c++,.net等都支持面向对 ...

  6. jmeter配置元件之计数器

    如果需要引用的数据量较大,且要求不能重复或者需要自增,那么可以使用计数器来实现. 计数器(counter):允许用户创建一个在线程组之内都可以被引用的计数器. 计数器允许用户配置一个起点,一个最大值, ...

  7. win10网上邻居看不到别的共享电脑怎么样办

    https://jingyan.baidu.com/article/4853e1e5b714aa1909f72600.html

  8. Python高级笔记(七)魔法属性

    1. 私有属性 名字重整 print(Test.__dict__) {'__weakref__': <attribute '__weakref__' of 'Test' objects>, ...

  9. 【Java】Spring之控制反转(IoC)(二)

    控制反转(IoC) IoC:Inverse of Control(控制反转) 读作“反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来 ...

  10. Debugging Kafka connect

    1. setup debug configuration mainClass: org.apache.kafka.connect.cli.ConnectDistributed VMOption: -D ...