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();}

}

以上就是获取手机联系人并展示的代码。要注意的地方我写代码的时候都写进代码里面了,还有什么不懂的或者有更好的建议的朋友,可以在下方评论。

原创粉丝点击