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. P1108 低价购买——最长下降子序列+方案数

    P1108 低价购买 最长下降子序列不用多讲:关键是方案数: 在求出f[i]时,我们可以比较前面的f[j]; 如果f[i]==f[j]&&a[i]==a[j] 要将t[j]=0,去重: ...

  2. Chrome浏览器控制台[DOM] Password field is not contained in a form:

    [DOM] Password field is not contained in a form: ( [DOM]密码字段不包含在form表单中) 解决方案:添加一层form标签 <div cla ...

  3. 微信小程序丨将溢出的文本用省略号代替的方法

    下面进入正题,有关于将溢出的文本用省略号代替的方法,不知道什么原因,我的程序用传统的代码无法解决: .text{ white-space: nowrap; overflow: hidden; text ...

  4. 【一】SpringMVC框架原理

    springmvc基础知识 1.什么是springMVC 2.springMVC框架原理(掌握) 前端控制器.处理器映射器.处理器适配器.视图解析器 3.springmvc入门程序 目的:对前端控制器 ...

  5. https://github.com/python/cpython/blob/master/Doc/library/contextlib.rst 被同一个线程多次获取的同步基元组件

    # -*- coding: utf-8 -*- import time from threading import Lock, RLock from datetime import datetime ...

  6. 深入理解JS中&&和||

    写了这么多JS,才发现JS的语法既是属于C语系的,又与一般C语系的编程语言某些地方有很大区别,其中&&和||就是其中一例. C语系中的&&和|| C语系的&&a ...

  7. ntpd服务

    yum -y install ntp 服务器端 [root@ip-172-31-6-148~]# vim /etc/ntp.conf ...# Use public servers from thep ...

  8. Android studio: Android Studio 3.5格式化布局代码时错乱

    Android studio 又来搞事情了,更新到3.5版本后,格式化布局文件代码时,布局文件代码竟然会发生变化,意思是不让格式化代码了呗? 垃圾的IDE. 解决办法: “File”-"Se ...

  9. C# mvc后台传过来的list 怎么在js使用

    var arr= JSON.parse('@Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize( ...

  10. markdown如何在表格内换行?

    答:使用<br>即可在表格内换行