1. 程式人生 > >Android中聯絡人的操作(讀取和寫入聯絡人)

Android中聯絡人的操作(讀取和寫入聯絡人)

瞭解了ContentProvider之後,我們可以嘗試來操作手機中的聯絡人。

這個操作是非常常用的,那麼首先我們要了解聯絡人在手機資料庫中是如何儲存的。


聯絡人中,有三張表比較關鍵raw_contact,data.minetype.

下面的程式碼則是讀取和寫入聯絡人。

public class TestContact extends AndroidTestCase {

	public void getAllContactInfo() throws Exception{
		String rawbase = "content://com.android.contacts/raw_contacts";
		String database = "content://com.android.contacts/data";
		Cursor cursor = getContext().getContentResolver().query(Uri.parse(rawbase), null, null, null, null);
		while (cursor.moveToNext()) {
			
			String id  = cursor.getString( cursor.getColumnIndex("_id"));
			System.out.println("id ="+ id);
			
			Cursor datacursor = getContext().getContentResolver().query(Uri.parse(database), null, "raw_contact_id=?", new String[]{id}, null);
			while (datacursor.moveToNext()) {
				//看看data表中有哪些列名
//				String[]  names = datacursor.getColumnNames();
//				for(int i =0;i<names.length;i++){
//					System.out.println(names[i]);
//				}

				String type = datacursor.getString(datacursor.getColumnIndex("mimetype"));
				System.out.println(type);
				//取出郵箱姓名和電話號碼三種資料
				if("vnd.android.cursor.item/email_v2".equals(type)){
					String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));
					System.out.println("郵箱 "+ data1);
				}else if("vnd.android.cursor.item/name".equals(type)){
					String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));
					System.out.println("姓名 "+ data1);
				}else if("vnd.android.cursor.item/phone_v2".equals(type)){
					String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));
					System.out.println("電話號碼 "+ data1);
				}
				
			}
			datacursor.close();
		
		}
		cursor.close();
	}
	
	//寫入聯絡人
	public void writeContact() throws Exception{
		String rawbase = "content://com.android.contacts/raw_contacts";
		 ContentValues values = new ContentValues();
		 Uri  uri = getContext().getContentResolver().insert(Uri.parse(rawbase), values);
		 //返回的raw_contact 表中的_id
		 long id = ContentUris.parseId(uri);
		 
		 String database = "content://com.android.contacts/data";
		 ContentValues nameValues = new ContentValues();
		 nameValues.put("mimetype", "vnd.android.cursor.item/name");
		 nameValues.put("data1", "wangwu");
		 nameValues.put("raw_contact_id", id);
		 getContext().getContentResolver().insert(Uri.parse(database), nameValues);
		 
		 ContentValues phoneValues = new ContentValues();
		 phoneValues.put("mimetype", "vnd.android.cursor.item/phone_v2");
		 phoneValues.put("data1", "999999");
		 phoneValues.put("raw_contact_id", id);
		 getContext().getContentResolver().insert(Uri.parse(database), phoneValues);
		 
		 ContentValues emailValues = new ContentValues();
		 emailValues.put("mimetype", "vnd.android.cursor.item/email_v2");
		 emailValues.put("data1", "
[email protected]
"); emailValues.put("raw_contact_id", id); getContext().getContentResolver().insert(Uri.parse(database), emailValues); } }


相關推薦

Android聯絡人操作(讀取寫入聯絡人)

瞭解了ContentProvider之後,我們可以嘗試來操作手機中的聯絡人。 這個操作是非常常用的,那麼首先我們要了解聯絡人在手機資料庫中是如何儲存的。 聯絡人中,有三張表比較關鍵raw_contact,data.minetype. 下面的程式碼則是讀取和寫入聯絡人。

Python檔案的讀取寫入

從檔案中讀取資料 讀取整個檔案 這裡假設在當前目錄下有一個檔名為’pi_digits.txt’的文字檔案,裡面的資料如下: 3.1415926535 8979323846 2643383279 with open('pi_digits.txt') a

C++Txt檔案讀取寫入

一、ASCII 輸出 為了使用下面的方法, 你必須包含標頭檔案<fstream.h>(譯者注:在標準C++中,已經使用<fstream>取代< fstream.h>,所有的C++標準標頭檔案都是無後綴的。)。這是 <iostrea

JAVA CSV操作(讀取寫入)

package com.udbac.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStre

C#NPOI操作excel之讀取寫入excel數

一、下載引用 下載需要引用的dll,即:NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll,ICSharpCode.SharpZipLib.dll(offic

File類的特點?如何建立File類物件?Java如何操作檔案內容,什麼是Io流Io流如何讀取寫入檔案?位元組緩衝流使用原則?

                            重難點提示                                 學習目標 1、能夠了解File類的特點(存在的意義,構造方法,常見方法) 2、能夠了解什麼是IO流以及分類(IO流的概述以及分類)

java操作excel需要的配置以及讀取寫入方法

參考連結: https://blog.csdn.net/seven__________7/article/details/53338300 https://blog.csdn.net/lu1005287365/article/details/51704774 下載poi模組最新版本,連結

在VB.net裡面 操作 類屬性的讀取寫入

以下是一個獨立的類 Public Class Class1 Private _Java As String Private _CSharp As String Private _VBNet As String Private _SQLServ

java對txtexcel的讀取寫入

txt工具類: package com.rj.bd.xm; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInpu

java對xml的讀取寫入

java對xml操作需匯入dom4j的jar包(如下): (解析)讀取xml: package com.rj.bd.xml.jx; import java.io.File; import java.util.List; import org.dom4j.Attri

【快學SCALA】Scala檔案的讀取寫入、控制檯輸入操作

1、檔案的讀取、寫入操作 2、控制檯操作程式碼實戰 val file = Source.fromFile("E:\\WangJialin.txt") for(line <-file.getLines){println(file)

Android建立資料夾檔案的操作

    本文重溫講解下Android中如何建立資料夾和檔案, 1、首先需要新增許可權 <span style="font-size:10px;"><!--在sdcard中新增寫入資料的許可權 --> <uses-permission a

Android 檔案的讀取寫入

(1)openFileInput和openFileOutput的使用 檔案的使用,注意最後要用finally給關閉掉。 openFileOutput:(寫入檔案,如果沒有檔名可以建立,這裡不需要判斷是否有這個檔案)---> FileOutputStre

Verilog十大基本功2(testbench的設計 檔案讀取寫入操作 原始碼)

需求說明:Verilog設計基礎 內容       :testbench的設計 讀取檔案 寫入檔案 來自       :時間的詩 十大基本功之 testbench 1. 激勵的產生 對於 testbench 而言,埠應當和被測試的 module 一一對應。 埠分

Android定時器TimerTimerTask的啟動,停止,暫停,繼續等操作例項

下面是一個在Android中使用定時器Timer和TimerTask的啟動,停止,暫停,繼續等操作的demo。 需要注意的問題主要有兩點: 1、Timer和TimerTask在呼叫cancel()取消後不能再執行 schedule語句,否則提示出錯,提示如下:D/Andro

Android -- 利用ContentProvider 讀取寫入簡訊

1. 讀寫簡訊 示例程式碼 均需要先獲得讀寫簡訊的許可權 <uses-permission android:name="android.permission.WRITE_SMS"/>

Scala檔案的讀取寫入、控制檯輸入操作程式碼實戰

內容: 1、檔案的讀取、寫入操作 2、控制檯操作程式碼實戰 val file = Source.fromFile("E:\\WangJialin.txt") for(line <-file.getLines){println(file)

使用C#操作Oracle Spatial的SDO_GEOMETRY對像(讀取寫入

首先,這個需要使用ODAC,也就是Oracle.DataAccess.dll,新出的託管Oracle.ManagedDataAccess.dll不支援Object Type,無法使用 先根據SDO_GEOMETRY物件的內容,在C#中構建一個對應的類,然後在讀取和寫入

IO流以字元流讀取寫入

字元流的讀取。 public static void readFileByBufferReanderLine(File file) {   BufferedReader bufferedReader = null;   String tempString = null;  

nodeks —— fs模塊 —— 從流 讀取寫入數據

require dstream ali 壓縮文件 當前目錄 con style 代碼 zlib Fs流讀取和寫入數據 使用文件流來讀取大文件不會卡頓 1, 從流中讀取數據 var fs = require("fs"); var data = ‘‘; var cou