Android讀寫聯系人數據(內容提供者應用)

jopen 10年前發布 | 33K 次閱讀 Android Android開發 移動開發

布局文件:

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!