ContentProvider 内容提供者
来源:互联网 发布:人工智能生活应用实例 编辑:程序博客网 时间:2024/06/05 20:42
第一次写博客,可能条例不太清晰。以后我会努力改正。
MainActivity
“`
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/
* 获取手机 联系人 并展示
* @author alice
*
/*
public class MainActivity extends AppCompatActivity {
private Context mContext = MainActivity.this;
private ListView listView;
private TextView empty_tv;
private ContentResolver resolver;
private List<Map<String, String>> contacts = new ArrayList<Map<String, String>>();private SimpleAdapter adapter;// raw_contacts 表的Uriprivate Uri rawContactsUri = ContactsContract.RawContacts.CONTENT_URI;// data 表的Uriprivate Uri dataUri = ContactsContract.Data.CONTENT_URI;// data表中的 phone 字段private Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;// data 表中的 email 字段private Uri emailUri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); empty_tv = (TextView) findViewById(R.id.empty_tv); listView.setEmptyView(empty_tv); resolver = getContentResolver(); contacts.addAll(getContacts()); adapter = new SimpleAdapter(this, contacts, R.layout.item_layout, new String[] { "display_name", "phone", "email" }, new int[] { R.id.display_name_tv, R.id.phone_tv, R.id.email_tv }); listView.setAdapter(adapter); **// 点击 删除 一条联系人数据** listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int result = resolver.delete(rawContactsUri, "_id = ?", new String[] { contacts.get(position).get("rawId") }); if (result > 0) { contacts.remove(position); adapter.notifyDataSetChanged(); } } });}// 获取联系人private List<Map<String, String>> getContacts() { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); Cursor rawCursor = resolver.query(rawContactsUri, new String[] { "_id", "display_name" }, null, null, null); if (rawCursor != null) { while (rawCursor.moveToNext()) { // 用来存储查询到的结果值 Map<String, String> map = new HashMap<String, String>(); String rawId = rawCursor.getString(0); String display_name = rawCursor.getString(1); map.put("rawId", rawId); map.put("display_name", display_name); // 根据 拿到的 rawId 查询data 表中的数据 // 获取电话号码 Cursor phoneCursor = resolver.query(phoneUri, new String[] { "data1" }, "raw_contact_id = ?", new String[] { rawId }, null); if (phoneCursor != null) { while (phoneCursor.moveToNext()) { String phone = phoneCursor.getString(0); map.put("phone", phone); } } phoneCursor.close(); // 查询 Email Cursor emailCursor = resolver.query(emailUri, new String[] { "data1" }, "raw_contact_id = ?", new String[] { rawId }, null); if (emailCursor != null) { while (emailCursor.moveToNext()) { String email = emailCursor.getString(0); map.put("email", email); } } emailCursor.close(); // 一次循环 代表一个联系人 list.add(map); } rawCursor.close(); } return list;}public void onClick(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setIcon(R.mipmap.ic_launcher); builder.setTitle("警告"); builder.setMessage("你确定要添加这个联系人吗?"); View dialogView = View.inflate(mContext, R.layout.dialog_layout, null); builder.setView(dialogView); final EditText name_et = (EditText) dialogView.findViewById(R.id.name_et); final EditText phone_et = (EditText) dialogView.findViewById(R.id.phone_et); final EditText email_et = (EditText) dialogView.findViewById(R.id.email_et); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String name = name_et.getText().toString(); String phone = phone_et.getText().toString(); String email = email_et.getText().toString(); //添加联系人 addContact(name, phone, email); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.show();}// 添加联系人private void addContact(String name, String phone, String email) { // 先插入一条数据到 raw_contacts 表中 获取者跳数据的 Id ContentValues values = new ContentValues(); Uri uri = resolver.insert(rawContactsUri, values); long id = ContentUris.parseId(uri); // 插入name values.clear(); values.put("raw_contact_id", id); values.put("data1", name); values.put("mimetype", "vnd.android.cursor.item/name"); resolver.insert(dataUri, values); // 电话号码 values.clear(); values.put("raw_contact_id", id); values.put("data1", phone); values.put("mimetype", "vnd.android.cursor.item/phone_v2"); resolver.insert(dataUri, values); // email values.clear(); values.put("raw_contact_id", id); values.put("data1", email); values.put("mimetype", "vnd.android.cursor.item/email_v2"); resolver.insert(dataUri, values); // 刷新一下 contacts.clear(); contacts.addAll(getContacts()); adapter.notifyDataSetChanged();}
}
以上就是获取手机联系人并展示的代码。要注意的地方我写代码的时候都写进代码里面了,还有什么不懂的或者有更好的建议的朋友,可以在下方评论。
- ContentProvider内容提供者
- Android ContentProvider(内容提供者)
- ContentProvider 内容提供者
- ContentProvider内容提供者(一)
- ContentProvider内容提供者(二)
- ContentProvider 内容提供者
- android内容提供者ContentProvider
- Android--- ContentProvider(内容提供者)
- ContentProvider内容提供者
- ContentProvider(内容提供者)
- ContentProvider(内容提供者)
- ContentProvider内容提供者
- ContentProvider 内容提供者
- ContentProvider 内容提供者
- contentprovider 自定义内容提供者
- ContentProvider内容提供者
- ContentProvider 内容提供者
- ContentProvider 内容提供者
- git操作
- JMeter MongoDB script使用方法
- 2018网易校招-字符串碎片
- 深度学习与神经网络学习笔记(三)
- hibernate映射关系
- ContentProvider 内容提供者
- 字符编码方式
- EditText下划线颜色修改
- 09下软考错题集锦
- Spring源码学习(1) — 总体概述
- C#_获取汉字拼音
- CCF-CSP 通信网络 JAVA 201709-4 100分
- 实时监控MySQL信息的脚本
- 深度详解根轨迹的8大规则