第四十九篇 -- 添加联系人信息Addcontact
往通讯录里添加联系人
首先,在清单文件里添加读写权限
- <uses-permission android:name="android.permission.READ_CONTACTS"/><!-- 读取通讯录权限 -->
- <uses-permission android:name="android.permission.WRITE_CONTACTS"/><!-- 写入通讯录权限 -->
MainActivity.java
- package com.aimee.android.play.addcontact;
- import android.Manifest;
- import android.content.ContentResolver;
- import android.content.ContentValues;
- import android.database.Cursor;
- import android.net.Uri;
- import android.os.Bundle;
- import android.text.TextUtils;
- import android.view.View;
- import android.widget.EditText;
- import android.widget.Toast;
- public class MainActivity extends BaseActivity {
- private static final String TAG = "MainActivity";
- private EditText mEtname;
- private EditText mEtmail;
- private EditText mEtphone;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- performCodeWithPermission("插入联系人信息", new PermissionCallback() {
- @Override
- public void hasPermission() {
- }
- @Override
- public void noPermission() {
- }
- }, Manifest.permission.WRITE_CONTACTS, Manifest.permission.READ_CONTACTS);
- mEtname = findViewById(R.id.et_name);
- mEtmail = findViewById(R.id.et_email);
- mEtphone = (EditText) findViewById(R.id.et_phone);
- }
- /**
- * 添加联系人信息
- * @param view
- */
- public void addContact(View view) {
- //1.判断是否为空
- String name = mEtname.getText().toString().trim();
- String email = mEtmail.getText().toString().trim();
- String phone = mEtphone.getText().toString().trim();
- if (TextUtils.isEmpty(name)){
- Toast.makeText(this,"姓名不能为空",Toast.LENGTH_SHORT).show();
- return;
- }
- //2.在raw_contact表里面添加联系人id
- ContentResolver resolver = getContentResolver();
- Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
- Uri dataUri = Uri.parse("content://com.android.contacts/data");
- Cursor cursor = resolver.query(uri, null, null, null, null, null);
- int new_id = cursor.getCount() + 1;
- ContentValues values = new ContentValues();
- resolver.insert(uri,values);
- //3.在data表里面添加联系人数据
- ContentValues namevalues = new ContentValues();
- namevalues.put("raw_contact_id",new_id);
- namevalues.put("data1",name);
- namevalues.put("mimetype","vnd.android.cursor.item/name");
- resolver.insert(dataUri,namevalues);
- ContentValues phonevalues = new ContentValues();
- phonevalues.put("raw_contact_id",new_id);
- phonevalues.put("data1",phone);
- phonevalues.put("mimetype","vnd.android.cursor.item/phone_v2");
- resolver.insert(dataUri,phonevalues);
- ContentValues emailvalues = new ContentValues();
- emailvalues.put("raw_contact_id",new_id);
- emailvalues.put("data1",email);
- emailvalues.put("mimetype","vnd.android.cursor.item/email_v2");
- resolver.insert(dataUri,emailvalues);
- Toast.makeText(this,"添加信息成功",Toast.LENGTH_SHORT).show();
- }
- }
activity_main.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <EditText
- android:id="@+id/et_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:layout_marginTop="32dp"
- android:layout_marginEnd="8dp"
- android:ems="10"
- android:hint="请输入name"
- android:inputType="textPersonName"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.503"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
- <EditText
- android:id="@+id/et_email"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:layout_marginTop="32dp"
- android:layout_marginEnd="8dp"
- android:ems="10"
- android:hint="请输入邮箱"
- android:inputType="textPersonName"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.503"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/et_name" />
- <EditText
- android:id="@+id/et_phone"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:layout_marginTop="32dp"
- android:layout_marginEnd="8dp"
- android:ems="10"
- android:hint="请输入号码"
- android:inputType="textPersonName"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.503"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/et_email" />
- <Button
- android:id="@+id/button3"
- android:layout_width="91dp"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:layout_marginTop="32dp"
- android:layout_marginEnd="8dp"
- android:onClick="addContact"
- android:text="Button"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/et_phone" />
- </android.support.constraint.ConstraintLayout>
界面:
输入姓名,邮箱,电话,然后点击Button就可以将其存储到通讯录中
第四十九篇 -- 添加联系人信息Addcontact的更多相关文章
- 第四十九篇 入门机器学习——数据归一化(Feature Scaling)
No.1. 数据归一化的目的 数据归一化的目的,就是将数据的所有特征都映射到同一尺度上,这样可以避免由于量纲的不同使数据的某些特征形成主导作用. No.2. 数据归一化的方法 数据归一化的方法主要 ...
- C++第四十九篇 -- 将一个项目Copy到另一台电脑
最近写项目,由于设备原因,需要将一台电脑的项目拷贝到另一台电脑上,在另一个电脑上继续编写.由于配置属性原因,最终还是在另一台电脑上创建了新项目,只是把这些cpp文件都复制过去了,然后重新部署属性. 背 ...
- 第四十九篇:webpack的基本使用(三) --安装和配置html-webpack-plugin插件
好家伙, 1.html-webpack-plugin的作用 讲一下为什么需要这个插件 存在问题:在点开locahost:8080之后出现的是项目的根目录,而不是网页 这时候需要再点开scr文件夹才能看 ...
- Python之路【第十九篇】:爬虫
Python之路[第十九篇]:爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...
- Gradle 1.12用户指南翻译——第四十九章. Build Dashboard 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- SQL注入之Sqli-labs系列第四十七关,第四十八关,第四十九关(ORDER BY注入)
0x1 源码区别点 将id变为字符型:$sql = "SELECT * FROM users ORDER BY '$id'"; 0x2实例测试 (1)and rand相结合的方式 ...
- 第四十九个知识点:描述在IPsec和TLS后的基本想法
第四十九个知识点:描述在IPsec和TLS后的基本想法 网络安全协议(Internet Protocol Security,IPsec)和安全传输层协议(Transport Layer Securit ...
- “全栈2019”Java第四十九章:重载与重写对比详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Egret入门学习日记 --- 第十九篇(书中 8.8~8.10 节 内容)
第十九篇(书中 8.8~8.10 节 内容) 开始 8.8节. 重点: 1.类型推断. 2.类型强制转换,使其拥有代码提示功能. 3.除了TS自带的类型判断,Egret官方也提供了类型判断的方法. 操 ...
随机推荐
- 【渗透实战】记一次艰难的内网漫游第四期_蹭我WIFI?看我如何利用组合拳日进蹭网者内网
/文章作者:Kali_MG1937 CSDN博客ID:ALDYS4 QQ:3496925334/ 内网漫游系列第三期:[渗透实战]记一次艰难的内网漫游第三期_我是如何利用APT攻击拿到内网最高权限的 ...
- 【SQLite】知识点概述
1.SQLite不与诸如MySQL,Oracle,PostgreSQL或SQL Server之类的客户端/服务器SQL数据库引擎竞争,SQLite与fopen()竞争,读写快35%.2.SQLite数 ...
- centos7 安装卸载程序rpm使用方法
1.安装 rpm 包: ➢ 基本语法 rpm -ivh RPM 包全路径名称 2.卸载 rpm 包: ➢ 基本语法 rpm -e RPM 包的名称 ➢ 应用案例 删除 firefox 软件包 rpm ...
- 5000字长文,kurryluo 的自学编程之路
我是程序员.大众口中非科班的那种,带着高中时期对二进制的恐惧,在大学参加科研比赛后保研,再到和校友一起创业,现在在某大型互联网公司做前端开发,一路走来都是靠自己学习. 前端框架 VUE 的作者尤大说过 ...
- PowerMockito的一些注意事项
PowerMockito的一些注意事项 目录 PowerMockito的一些注意事项 1 注解@PowerMockIgnore({"javax.crypto.*"}) 2 Powe ...
- python使用venv
venv模块支持使用自己的站点目录创建轻量级"虚拟环境",可选择与系统站点目录隔离.每个虚拟环境都有自己的Python二进制文件(与用于创建此环境的二进制文件的版本相匹配),并且可 ...
- Vue3全家桶升级指南二ref、toRef、toRefs的区别
ref是对原始数据的拷贝,当修改ref数据时,模板中的视图会发生改变,但是原始数据并不会改变. toRef是对原始数据的引用,修改toRef数据时,原始数据也会发生改变,但是视图并不会更新. 在vue ...
- Sql Server 查询正在执行的sql信息和锁定事务
执行中的sql SELECT [Spid] = session_Id, ecid, [Database] = DB_NAME(sp.dbid), [User] = nt_username, [Stat ...
- Mysql 主键的操作
主键:primary key ,主要的键.一张表只能有一个字段可以使用对应的键,用来唯一的约束字段里面的数据,数据不能重复,这种键称之为主键,一张表只能最多有一个主键. 一.增加主键 方法一:在 ...
- MySQL主从异常恢复
说明 MySQL主从出现不同步的情况时,或者要添加新的从库时,可以使用以下方法进行操作回复主从. 停止业务应用 停止所有连接到主从库上的应用,在恢复主从期间禁止任何增删改等操作,否则恢复失败 停止主从 ...