017 Android 获取手机SIM卡序列号和读取联系人
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卡序列号和读取联系人的更多相关文章
- android中判断sim卡状态和读取联系人资料的方法
在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. Pho ...
- 十九、android中判断sim卡状态和读取联系人资料的方法
在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. Pho ...
- Android 获取手机SIM卡运营商
直接上代码: /** * 获取SIM卡运营商 * * @param context * @return */ public static String getOperators(Context con ...
- Android开发之获取手机SIM卡信息
TelephonyManager是一个管理手机通话状态.电话网络信息的服务类.该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于訪问有关设 ...
- 【工具类】获取手机sim卡的运营商
加入权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" /> package ...
- Android 获取手机SIM资料详解
TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法.其中包括手机SIM的状态和信息.电信网络的状态及手机用户的信息.在应用程序中可以使用这些get方法获取 ...
- Android 手机卫士--绑定sim卡序列号
现在开始具体 处理每一个导航页面的逻辑,首先看第二个导航页 本文地址:http://www.cnblogs.com/wuyudong/p/5949775.html,转载请注明出处. 这里需要实现绑定s ...
- 获取sim卡序列号
//获取sim卡序列号TelephoneManager TelephonyManager manager = (TelephonyManager)getSystemService(Context.TE ...
- Android获取手机设备识别码(IMEI)和手机号码
最近看了下获取手机设备ID和手机信息以及SIM的信息例子,主要还是借鉴别人的,现在自己写一下,算是巩固加深了,也希望能给大家一个参考 必要的条件还是一部真机,SIM卡或者UIM卡. 首先,在Andro ...
随机推荐
- IDEA_2019.2的安装与个人配置(Windows)
1. 下载 官方下载网站:https://www.jetbrains.com/idea/download/ IDEA是支持多平台的开发工具,分为Windows.Mac和Linux三个平台,这里就只拿W ...
- Windows平台上运行Tomcat
从之前的学习中知道,可以调用Bootstrap类将Toomcat作为一个独立的应用程序来运行,在Windows平台上,可以调用startup.bat批处理文件来启动Tomcat,或运行shutdown ...
- imageButton和zoomButton
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- 【转】Python 代码批量抓取免费高清图片!
import requests from bs4 import BeautifulSoup import random import time from fake_useragent import U ...
- ISO/IEC 9899:2011 条款6.7.3——类型限定符
6.7.3 类型限定符 语法 1.type-qualifier: const restrict volatile _Atomic 约束 2.除了指针类型(其被引用的类型是一个对象类型)之外的类型,不应 ...
- C/C++ socket编程教程之九:TCP的粘包问题以及数据的无边界性
C/C++ socket编程教程之九:TCP的粘包问题以及数据的无边界性 上节我们讲到了socket缓冲区和数据的传递过程,可以看到数据的接收和发送是无关的,read()/recv() 函数不管数据发 ...
- WPF richTextBox 滚动到某项
在网上没有找到合适的代码,自己写了一段,还有待优化... 直接上代码 /// <summary> /// 滚动到某项 /// </summary> /// <param ...
- org/apache/curator/RetryPolicy at com.alibaba.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.connect(CuratorZookeeperTransporter.java:26)
使用dubbo服务,启动项目报错: org/apache/curator/RetryPolicy at com.alibaba.dubbo.remoting.zookeeper.curator.Cur ...
- hugepage设置相关总结
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/shaoyunzhe/article/de ...
- source insight 4.0常见问题及相关配置
摘自:https://blog.csdn.net/liitdar/article/details/79891795 本文介绍source insight 4.0常见的问题以及相关的配置. 1. ...