Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android批量添加通話記錄

Android批量添加通話記錄

編輯:關於Android編程

在前面有提到批量添加聯系人:Android批量添加聯系人到通訊錄,通話記錄和通訊錄一樣都是直接操作ContentProvider。為了使批量更新、插入、刪除數據更加方便,android系統引入了 ContentProviderOperation類,使用ContentProviderOperation的理由

1.所有的操作都在一個事務中執行,這樣可以保證數據完整性
2.由於批量操作在一個事務中執行,只需要打開和關閉一個事務,比多次打開關閉多個事務性能要好些
3.使用批量操作和多次單個操作相比,減少了應用和content provider之間的上下文切換,這樣也會提升應用的性能,並且減少占用CPU的時間,當然也會減少電量的消耗。

首先定義一個通話記錄的實體類

package com.csr.BTApp.apical.domain;

public class Tb_calllogs {
	private String mNumber; // 號碼
	private String mName; // 在通訊錄中的聯系人
	private int mCallLogType; // 通話記錄的狀態 1:來電 2:去電 3:未接
	private Long mCallLogDate; // 通話記錄日期
	private int mCallLogDuration; // 通話記錄時長

	public Tb_calllogs() {

	}

	public Tb_calllogs(String mNumber, String mName, int mCallLogType,
			Long mCallLogDate, int mCallLogDuration) {
		super();
		this.mNumber = mNumber;
		this.mName = mName;
		this.mCallLogType = mCallLogType;
		this.mCallLogDate = mCallLogDate;
		this.mCallLogDuration = mCallLogDuration;
	}

	public String getmNumber() {
		return mNumber;
	}

	public void setmNumber(String mNumber) {
		this.mNumber = mNumber;
	}

	public String getmName() {
		return mName;
	}

	public void setmName(String mName) {
		this.mName = mName;
	}

	public int getmCallLogType() {
		return mCallLogType;
	}

	public void setmCallLogType(int mCallLogType) {
		this.mCallLogType = mCallLogType;
	}

	public Long getmCallLogDate() {
		return mCallLogDate;
	}

	public void setmCallLogDate(Long mCallLogDate) {
		this.mCallLogDate = mCallLogDate;
	}

	public int getmCallLogDuration() {
		return mCallLogDuration;
	}

	public void setmCallLogDuration(int mCallLogDuration) {
		this.mCallLogDuration = mCallLogDuration;
	}

	@Override
	public String toString() {
		return "Tb_calllogs [mNumber=" + mNumber + ", mName=" + mName
				+ ", mCallLogType=" + mCallLogType + ", mCallLogDate="
				+ mCallLogDate + ", mCallLogDuration=" + mCallLogDuration + "]";
	}
}

添加單條通話記錄

	/**
	 * 往數據庫中新增通話記錄
	 * 
	 * @param name
	 * @param number
	 */
	public static void AddCallLogs(Tb_calllogs calllog) {
		ContentValues values = new ContentValues();
		values.clear();
		values.put(CallLog.Calls.CACHED_NAME, calllog.getmName());
		values.put(CallLog.Calls.NUMBER, calllog.getmNumber());
		values.put(CallLog.Calls.TYPE, calllog.getmCallLogType());
		values.put(CallLog.Calls.DATE, calllog.getmCallLogDate());
		values.put(CallLog.Calls.DURATION, calllog.getmCallLogDuration());
		values.put(CallLog.Calls.NEW, "0");// 0已看1未看 ,由於沒有獲取默認全為已讀
		mContext.getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);
	}
批量操作

	public static void BatchAddCallLogs(List list)
			throws RemoteException, OperationApplicationException {
		GlobalConstants.PrintLog_D("[GlobalVariables->]BatchAddCallLogs begin");
		ArrayList ops = new ArrayList();
		ContentValues values = new ContentValues();

		for (Tb_calllogs calllog : list) {
			values.clear();
			values.put(CallLog.Calls.CACHED_NAME, calllog.getmName());
			values.put(CallLog.Calls.NUMBER, calllog.getmNumber());
			values.put(CallLog.Calls.TYPE, calllog.getmCallLogType());
			values.put(CallLog.Calls.DATE, calllog.getmCallLogDate());
			values.put(CallLog.Calls.DURATION, calllog.getmCallLogDuration());
			values.put(CallLog.Calls.NEW, "0");// 0已看1未看 ,由於沒有獲取默認全為已讀
			ops.add(ContentProviderOperation
					.newInsert(CallLog.Calls.CONTENT_URI).withValues(values)
					.withYieldAllowed(true).build());
		}
		if (ops != null) {
			// 真正添加
			ContentProviderResult[] results = mContext.getContentResolver()
					.applyBatch(CallLog.AUTHORITY, ops);

			// for (ContentProviderResult result : results) {
			// GlobalConstants
			// .PrintLog_D("[GlobalVariables->]BatchAddCallLogs "
			// + result.uri.toString());
			// }
		}
	}
傳入list遍歷所有的list後,添加到ContentProviderOperation最後才調用applyBatch效率會高很多。

參考文章:http://blog.chengyunfeng.com/?p=517



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved