当前位置: 首页 > news >正文

开发一个Android App,在项目中完成添加联系人的功能,通过ContentResolver向系统中添加联系人信息。

实现步骤:

        (1)添加动态联系人的权限。

        (2)创建Activity和布局文件,添加输入框和按钮等控件。

        (3)完成添加联系人的功能。

代码文件如下:

activity_main.xml文件

<!-- activity_main.xml -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><EditTextandroid:id="@+id/editTextName"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="姓名" /><EditTextandroid:id="@+id/editTextPhone"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/editTextName"android:layout_marginTop="16dp"android:hint="电话" /><Buttonandroid:id="@+id/buttonAddContact"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/editTextPhone"android:layout_marginTop="16dp"android:text="添加" /></RelativeLayout>

 MainActivity程序的代码如下

package com.qcxy.lesson6;import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {private EditText editTextName, editTextPhone;private Button buttonAddContact;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editTextName = findViewById(R.id.editTextName);editTextPhone = findViewById(R.id.editTextPhone);buttonAddContact = findViewById(R.id.buttonAddContact);buttonAddContact.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {addContact();}});}private void addContact() {String name = editTextName.getText().toString().trim();String phone = editTextPhone.getText().toString().trim();if (name.isEmpty() || phone.isEmpty()) {Toast.makeText(this, "Name and Phone cannot be empty", Toast.LENGTH_SHORT).show();return;}ContentResolver contentResolver = getContentResolver();ArrayList<ContentProviderOperation> operations = new ArrayList<>();// 添加姓名operations.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI).withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null).withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build());operations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name).build());// 添加电话号码operations.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone).withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE).build());try {contentResolver.applyBatch(ContactsContract.AUTHORITY, operations);Toast.makeText(this, "Contact added successfully", Toast.LENGTH_SHORT).show();} catch (Exception e) {e.printStackTrace();Toast.makeText(this, "Error adding contact", Toast.LENGTH_SHORT).show();}}
}

相关文章:

开发一个Android App,在项目中完成添加联系人的功能,通过ContentResolver向系统中添加联系人信息。

实现步骤&#xff1a; &#xff08;1&#xff09;添加动态联系人的权限。 &#xff08;2&#xff09;创建Activity和布局文件&#xff0c;添加输入框和按钮等控件。 &#xff08;3&#xff09;完成添加联系人的功能。 代码文件如下&#xff1a; activity_main.xml文件 <!…...

Flume搭建

压缩包版本&#xff1a;apache-flume-1.9.0-bin.tar 百度盘链接&#xff1a;https://pan.baidu.com/s/1ZhSiePUye9ax7TW5XbfWdw 提取码&#xff1a;ieks 1.解压 tar -zxvf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/ 2. 修改文件名 [rootbigdata1 opt]…...

Web APIs 1 DOM操作

Web APIs 1 引入&#xff1a;const优先Web API 基本认知01 作用和分类02 什么是DOM03 DOM树04 DOM对象 获取DOM对象01 根据CSS选择器获取02 其他获取DOM元素方法 操作元素内容01 innerText 属性02 innerHTML 属性 操作元素属性操作元素的常用属性操作元素的样式属性操作表单元素…...

dvwa,xss反射型lowmedium

xss&#xff0c;反射型&#xff0c;low&&medium low发现xss本地搭建实操 medium作为初学者的我第一次接触比较浅的绕过思路high low 发现xss 本关无过滤 <script>alert(/xss/)</script> //或 <script>confirm(/xss/)</script> //或 <scr…...

从云计算到物联网:虚拟化技术的演变与嵌入式系统的融合

文章目录 一、硬件性能提升&#xff1a;摩尔定律与嵌入式虚拟化二、CPU多核技术&#xff1a;为嵌入式虚拟化提供支持三、业务负载整合&#xff1a;嵌入式虚拟化的核心需求四、降低硬件成本&#xff1a;虚拟化技术的经济效益五、软件重用与移植&#xff1a;虚拟化技术的优势六、…...

linux 文件查看 head 、 cat 、 less 、tail 、grep

查看文件详细信息 stat 文件 cat 》》适合显示小文件【行数比较少】&#xff0c;如果行数较多&#xff0c;屏幕显示不完整&#xff08;如果虚拟操作&#xff0c;是无法上下键的&#xff0c;或者滚动鼠标的&#xff0c;第三方 xsheel&#xff0c;crt 可以方向键查看&#xf…...

13.2 Web与Servlet进阶(❤❤)

13.2 Web与Servlet进阶 1. 请求与响应1.1 URL与URI1.2 HTTP请求的结构1. 结构2.后端获取访问工具类型:getHeader().toLowerCase方法1.3 响应的结构1. 结构2. 响应常见状态码3. 后端设置响应参数4. 响应的ContentType作用1.4 请求转发与响应重定向应用1. 请求转发:getRequestDis…...

记录解决报错--vue前后端分离,接口401(Unauthorized)

1.场景 前端访问不了后端接口。报错401。 2.解决步骤 ①在页面console.log(111)查看走到代码的位置没有。&#xff08;走到了&#xff0c;没问题&#xff09; ②查看vue.config.js配置。这段配置就是vue访问api的url。&#xff08;没问题&#xff09; devServer: {port: 80…...

【笔记】Android 常用编译模块和输出产物路径

模块&产物路径 具体编译到软件的路径要看编译规则的分区&#xff0c;代码中模块编译输出的产物基本对应。 Android 代码模块 编译产物路径设备adb路径Comment 模块device/mediatek/system/common/ 资源overlay/telephony/frameworks/base/core 文件举例res/res/values-m…...

部署私有知识库项目FastGPT

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景。 项目文档: [快速了解 FastGpt | FastGptFastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即…...

【2024-02-02】华为秋招笔试三道编程题解

恭喜发现宝藏&#xff01;搜索公众号【TechGuide】回复公司名&#xff0c;解锁更多新鲜好文和互联网大厂的笔经面经。 作者TechGuide【全网同名】 订阅专栏&#xff1a; 【专享版】2024最新大厂笔试真题解析&#xff0c;错过必后悔的宝藏资源&#xff01; 第一题&#xff1a;找…...

银行数据仓库体系实践(8)--主数据模型设计

主数据区域中保留了数据仓库的所有基础数据及历史数据&#xff0c;是数据仓库中最重要的数据区域之一&#xff0c;那主数据区域中主要分为近源模型区和整合&#xff08;主题&#xff09;模型区。上一节讲到了模型的设计流程如下图所示。那近源模型层的设计在第2.3和3这两个步骤…...

vue在main.js中引入三方插件不生效的原因

有的时候需要比较复杂的功能,但是自己实现比较复杂的话,可以引入第三方插件.如果这个第三方插件需要全局都使用的话,可以在main.js中进行引入. 比如router elementplus之类的. import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/…...

chatgpt搭建

chatgpt两步搭建大法 部署docker环境 下载docker curl -fsSL https://get.docker.com -o get-docker.sh安装docker sh get-docker.sh运行docker服务 systemctl start docker查看运行状态 systemctl status docker设置docker开机自启 systemctl enable docker部署chatgpt…...

vue基本理解

1、js闭包&#xff0c;作用&#xff1f;&#xff1f; 闭包是指在一个函数内部&#xff0c;可以访问外部函数的变量&#xff0c;即使外部函数已经执行完毕。闭包的作用有&#xff1a; 保护变量&#xff1a;闭包可以保护函数内部的变量&#xff0c;使其不受外部环境的影响。实现…...

NLP入门系列—Attention 机制

NLP入门系列—Attention 机制 Attention 正在被越来越广泛的得到应用。尤其是 [BERT]火爆了之后。 Attention 到底有什么特别之处&#xff1f;他的原理和本质是什么&#xff1f;Attention都有哪些类型&#xff1f;本文将详细讲解Attention的方方面面。 Attention 的本质是什…...

实习记录——第十天

今天啥也不想说了&#xff0c;ctf里面还有道题目还没做&#xff0c;这里就不写了&#xff0c;把日报奉上&#xff0c;懂得都懂&#xff1a; 2.2日总结&#xff1a; 早上对xx银行的招聘网站做了渗透测试&#xff0c;对招聘网点赞处做重放看是否会多次点赞&#xff0c;对收藏处考…...

Java实现学生信息管理系统:从Excel中提取数据的实用方法

在Java中实现学生信息管理系统并从Excel中读取数据&#xff0c;通常适用于以下场景&#xff1a; 数据迁移和集成&#xff1a;如果你有一个现存的学生信息管理系统&#xff0c;该系统可能使用数据库或其他存储方式&#xff0c;但你想将这些数据迁移到新的系统。Excel文件可能提…...

幻兽帕鲁服务器怎么一键删除游戏存档?(阿里云服务器)

目前通过阿里云一键部署的幻兽帕鲁服务器&#xff0c;已经支持一键清除游戏存档了&#xff0c;已经不需要你再去手动找到游戏存档文件夹&#xff0c;去手动删除了。首先打开阿里云的“计算巢服务器”控制台 进入之后&#xff0c;选择你的幻兽帕鲁服务实例&#xff0c;点击进入详…...

Cambalache in Ubuntu

文章目录 前言apt install flatpak这很ok后记 前言 gtkmm4相比gtkmm3有很多改革, 代码也干净了许多, 但在windows上开发 有ui设计器那自然方便很多, 但glade又不支持gtkmm4, windows上装Cambalache很是困难. 各种问题都找不到答案.于是 我用VMware虚拟机Ubuntu20.xx安装Cambal…...

OpenClaw隐私保护方案:千问3.5-35B-A3B-FP8本地化数据处理实践

OpenClaw隐私保护方案&#xff1a;千问3.5-35B-A3B-FP8本地化数据处理实践 1. 为什么需要全链路隐私保护 去年我帮一位医生朋友整理病历资料时&#xff0c;突然意识到一个问题&#xff1a;当AI助手能读取患者检查报告、化验单甚至影像资料时&#xff0c;如何确保这些敏感信息…...

杰理之在音乐模式下播放音乐一首歌曲结束后会出现异常死机【篇】

媒体配置iis输出...

Windows系统优化神器Winhance:让电脑飞起来的终极指南 [特殊字符]

Windows系统优化神器Winhance&#xff1a;让电脑飞起来的终极指南 &#x1f680; 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/…...

2026行李箱推荐别乱买!唯尊、海澜之家、森马、外交官、珉璐保罗五款横评

对于技术从业者而言&#xff0c;行李箱不仅是装载衣物的容器&#xff0c;更是保护精密电子设备、应对高频差旅与跨城迁移的可靠装备。无论是前往异地调试系统、参加技术峰会&#xff0c;还是举家搬迁&#xff0c;一个设计合理、性能可靠的行李箱能显著提升出行效率与体验。本文…...

基于LSTM的AWPortrait-Z视频人像实时美化方案

基于LSTM的AWPortrait-Z视频人像实时美化方案 1. 引言 视频人像处理一直有个头疼的问题&#xff1a;单张图片修得再漂亮&#xff0c;放到视频里一看&#xff0c;帧与帧之间总是不连贯&#xff0c;脸色忽明忽暗&#xff0c;轮廓时粗时细&#xff0c;看起来特别不自然。这就是典…...

OpenClaw浏览器自动化:Qwen3-14B驱动跨页面数据采集

OpenClaw浏览器自动化&#xff1a;Qwen3-14B驱动跨页面数据采集 1. 为什么选择OpenClaw做数据采集&#xff1f; 去年我接手了一个电商价格监控的需求&#xff0c;需要定期抓取30多个商品页面的价格波动。最初尝试用Python写爬虫&#xff0c;但很快遇到三个痛点&#xff1a;反…...

liunx的编译与链接(7)

1.条件编译的现实用途1.软件根据收费情况进行条件编译来对代码进行动态裁剪2.不同硬件所需的内核代码不同&#xff0c;可以采用条件编译来进行代码裁剪3.开发工具&#xff0c;应用软件的代码采用条件编译来适配不同的操作系统2.要转换为汇编语言的原因是历史导致代码的本质是操…...

5962-88769022A,兼容LSTTL/TTL/CMOS逻辑与6.4mA驱动能力的防抖动逻辑门光耦

简介今天我要向大家介绍的是 Broadcom 的光电耦合器——5962-88769022A。它的每一条通道都由一颗AlGaAs发光二极管和一颗带有迟滞阈值的高增益光子探测器组成。当输入端接收到2mA到8mA的微小电流时&#xff0c;LED便会发光。而接收端的探测器不仅负责捕捉光信号&#xff0c;其内…...

「码动四季·开源同行」go语言:如何使用 ELK 进行日志采集以及统一处理?

在前面的一系列文章中&#xff0c;我们介绍了微服务各个组件的相关实践&#xff0c;从本文开始我们将会介绍微服务日常开发的一些"利器”&#xff0c;这些工具会帮助我们构建更加健壮的微服务系统&#xff0c;并帮助排查解决微服务系统中的问题与性能瓶颈等。ELK 技术栈本…...

SDMatte Web服务灰度流量控制:基于用户ID哈希的AB测试分流规则

SDMatte Web服务灰度流量控制&#xff1a;基于用户ID哈希的AB测试分流规则 1. 引言 在AI服务实际落地过程中&#xff0c;灰度发布和AB测试是验证新功能效果的关键手段。对于SDMatte这样的专业级图像抠图服务&#xff0c;如何科学地分配流量到不同版本&#xff0c;直接影响着功…...