文档章节

Android读写联系人数据(内容提供者应用)

维特的烦恼
 维特的烦恼
发布于 2014/01/27 00:56
字数 524
阅读 556
收藏 5

布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/btn_getcontacts"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:onClick="read_click"
            android:layout_weight="1"
            android:text="读取联系人" />
        <Button
            android:id="@+id/btn_insertcontact"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:onClick="insert_click"
            android:layout_weight="1"
            android:text="写入联系人" />
    </LinearLayout>

</LinearLayout>

核心Activity 两种方式:

package com.example.readcontacts;

import java.util.ArrayList;
import java.util.List;

import com.pas.domain.ContactModel;

import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.app.Activity;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity
{

	LinearLayout ll;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		ll = (LinearLayout) findViewById(R.id.ll);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	public void read_click(View view)
	{
		getContactList();
	}

	public void insert_click(View view)
	{
		addContact();
		Toast.makeText(this, "添加成功", Toast.LENGTH_LONG).show();
	}

	private void addContact()
	{
		ContentResolver resolver = getContentResolver();

		ArrayList<ContentProviderOperation> operations=new ArrayList<ContentProviderOperation>();
		
		Uri raw_contacts_uri = Uri.parse("content://com.android.contacts/raw_contacts");
		Uri data_uri = Uri.parse("content://com.android.contacts/data");

		
		ContentProviderOperation op1=ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
				.withValue(ContactsContract.RawContacts.ACCOUNT_NAME,null)
				.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE,null).build();
		operations.add(op1);
		
		ContentProviderOperation op2=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, "王刚")
				.build();
		operations.add(op2);
		
		ContentProviderOperation op3=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, "990009")
				.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM)
				.build();
		
		operations.add(op3);
		
		ContentProviderOperation op4=ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
				.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
				.withValue(ContactsContract.Data.MIMETYPE, 
						ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
				.withValue(ContactsContract.CommonDataKinds.Email.DATA, "ping@12.com")
				.withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_CUSTOM)
				.build();
		operations.add(op4);
		
		try {  
			resolver.applyBatch(ContactsContract.AUTHORITY, operations);  
	    } catch (Exception e) {  
	    	e.printStackTrace();
	    }  
		
//		ContentValues raw_values = new ContentValues();
//
//		Cursor cursor = resolver.query(raw_contacts_uri, new String[]
//		{ "_id" }, null, null, null);
//		cursor.moveToLast();
//		int lastid = cursor.getInt(0);
//		int newid = lastid + 1;
//
//		raw_values.put("contact_id", newid);
//		resolver.insert(raw_contacts_uri, raw_values);
//
//		// 电话插入
//		ContentValues phonevalues = new ContentValues();
//		phonevalues.put("data1", "898989");
//		phonevalues.put("mimetype", "vnd.android.cursor.item/phone_v2");
//		phonevalues.put("raw_contact_id", newid);
//		resolver.insert(data_uri, phonevalues);
//
//		// email插入
//		ContentValues emailvalues = new ContentValues();
//		emailvalues.put("data1", "ping@126.com");
//		emailvalues.put("mimetype", "vnd.android.cursor.item/email_v2");
//		emailvalues.put("raw_contact_id", newid);
//		resolver.insert(data_uri, emailvalues);
//
//		// name插入
//		ContentValues namevalues = new ContentValues();
//		namevalues.put("data1", "王刚");
//		namevalues.put("mimetype", "vnd.android.cursor.item/name");
//		namevalues.put("raw_contact_id", newid);
//		resolver.insert(data_uri, namevalues);
	}

	private void getContactList()
	{
		ContentResolver resolver = getContentResolver();

		Uri raw_contacts_uri = Uri.parse("content://com.android.contacts/raw_contacts");
		Uri data_uri = Uri.parse("content://com.android.contacts/data");

		ll.removeAllViews();
		Cursor cursor = resolver.query(raw_contacts_uri, null, null, null, null);
		while (cursor.moveToNext())
		{
			String contactid = cursor.getString(cursor.getColumnIndex("contact_id"));
			System.out.println(contactid + "\n");

			if (null != contactid)
			{
				StringBuffer sb = new StringBuffer("联系人ID:");
				sb.append(contactid).append(" ");

				Cursor data_cursor = resolver.query(data_uri, null, "raw_contact_id=?", new String[]
				{ contactid }, null);

				while (data_cursor.moveToNext())
				{
					String data1 = data_cursor.getString(data_cursor.getColumnIndex("data1"));
					String mimetype = data_cursor.getString(data_cursor.getColumnIndex("mimetype"));
					System.out.println("mimetype=" + mimetype + ";data1=" + data1);
					sb.append(data1).append(" ");
				}
				data_cursor.close();
				TextView tv = new TextView(this);
				LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
				tv.setLayoutParams(lp);
				tv.setText(sb.toString());
				ll.addView(tv);
			}
		}
		cursor.close();
	}
}

 

© 著作权归作者所有

维特的烦恼
粉丝 20
博文 97
码字总数 42329
作品 0
天津
私信 提问
Android基础之应用程序组件

Android应用程序由若干个不同类型的组件组合而成,每一个组件具有其特定的安全保护设计方式,它们的安全直接影响到应用程序的安全。Android应用程序组件的主要类型有:活动(Activity),服务...

柳哥
2014/11/28
160
0
Android应用程序基础(Application Fundamentals)之一

正在尝试分析SDK中的示例程序NotePad,发现仍然还欠缺很多知识。今天看到 API Guides 下有一部分应用程序基础 Application Fundamentals,感觉需要进一步学习。于是准备采用之前的策略,边翻...

AllenYao
2013/01/31
661
0
Android系统架构 四大组件

Android 系统架构 是怎么样工作的。 Linux 内核层 Android 系统是基于Linux内核的 ,这一层为安卓设备的各种硬件提供了底层驱动,如显卡驱动,音频驱动,照相机驱动,蓝牙WIFi电源等驱动 系统...

一箭落旄头
2018/10/08
39
0
【转】关于Android体系架构和开发库的部分信息

Android架构支持开发者创建自己的联系人应用或者电话拨号程序。你可以公布自己应用的组件,让其他开发者在此基础上创建新的用户界面,进行功能扩展或者其他工作!这是多么奇妙啊? 剖析Andro...

barsoom
2014/02/28
86
0
Android Studio教程02-应用程序结构图及应用基础

目录 1. Android应用程序开发技术结构图 2.Android的应用基础 2.1. Android的四大组件: 2.2.启动四大组件的方法 2.3. 清单文件 1. Android应用程序开发技术结构图 一、应用程序层 该层提供一...

Bricker666
01/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Dubbo-自适应拓展机制

背景 在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等,这些都是Dubbo的基础组件。这些基础组件的拓展不是在系统框架启动阶段被加载,而是拓展方...

rock-man
26分钟前
5
0
Kali安装fcitx输入法(五笔)

安装fcitx > sudo apt-get install fcitx-rime fcitx-config-gtk3 重启 > sudo reboot fcitx配置 效果就是这样 配置输入法切换 系统设置...

yeahlife
28分钟前
4
0
IE之css3效果兼容

本文转载于:专业的前端网站▷IE之css3效果兼容 一、兼容css阴影效果(ie滤镜) 1.Shadow,阴影 .shadow { -moz-box-shadow: 3px 3px 4px #000; -webkit-box-shadow: 3px 3px 4px #000; box-sha...

前端老手
31分钟前
4
0
NiushopB2C开源商城功能列表说明:

B2C单商户免费版:PC商城+微商城 B2C单商户标准版:PC商城+微商城组合套餐+阶梯优惠核销功能 B2C单商户企业版:PC商城+微商城拼团+组合套餐阶梯优惠+核销功能 B2C单商户分销版:PC商城+微商城...

niushop-芳
33分钟前
4
0
图片如何转GIF图片呢

如何将生活中拍摄的好玩有趣的图片制作成GIF动图呢?相信很多小伙伴都不知道要如何制作,其实制作方法非常的简单,下面分享一个图片转GIF动图的方法,希望这个方法能够帮助大家在与好友斗图时...

白米稀饭2019
40分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部