1. 程式人生 > >SIM卡 --- 聯絡人增加/刪除/更新 分析

SIM卡 --- 聯絡人增加/刪除/更新 分析

3.2 更新

insert/ delete/ update 三個方法執行的流程幾乎完全相同,以update方法為例進行論述。

update方法主要邏輯如下,

1,根據不同型別為引數賦值,

case ADN:
    efType = IccConstants.EF_ADN;
    subId = SubscriptionManager.getDefaultSubId();
break;
•••

2,呼叫updateIccRecordInEf方法進行操作,

boolean success = updateIccRecordInEf(efType, values, pin2, subId);

3,如果操作失敗,就返回0,

if (!success) {
   return 0;
}

否則,就呼叫notifyChange方法,已註冊了該資料的介面可以進行重新載入資料庫,更新UI等,

getContext().getContentResolver().notifyChange(url, null);
return 1;

主要是updateIccRecordInEf方法,這個方法和loadFromEf方法呼叫流程圖完全相同,也是一個同步方法。因此,細節方面就不論述了,流程圖如下,



IccPhoneBookInterfaceManager的updateAdnRecordsWithContentValuesInEfBySearch方法邏輯如下,

1,檢查是否在子執行緒中執行,

synchronized (mLock) {
  checkThread();

因為當前的執行緒需要休眠喚醒,因此,不能在UI執行緒中執行。

2,返回值初始化為false,構造回撥訊息EVENT_UPDATE_DONE,

mSuccess = false;
AtomicBoolean status = new AtomicBoolean(false);
Message response = mBaseHandler.obtainMessage(EVENT_UPDATE_DONE, status);

3,呼叫AdnRecordCache的updateAdnBySearch方法進行處理,

AdnRecord oldAdn = new AdnRecord(oldTag, oldPhoneNumber, oldEmailArray, oldAnrArray);
AdnRecord newAdn = new AdnRecord(newTag, newPhoneNumber, 
newEmailArray, newAnrArray);
if (mAdnCache != null) {
   mAdnCache.updateAdnBySearch(efid, oldAdn, newAdn, pin2, response);

4,呼叫waitForResult方法進行執行緒休眠,

waitForResult(status);

5,當前執行緒休眠之後喚醒之後,就返回結果,

return mSuccess;

當然,處理完成之後,當前執行緒在回撥處理的時候進行喚醒。

IccPhoneBookInterfaceManager的handleMessage方法對EVENT_UPDATE_DONE訊息處理如下,

ar = (AsyncResult) msg.obj; // 獲取結果
synchronized (mLock) {
    mSuccess = (ar.exception == null);
    notifyPending(ar);
}
break;

如果沒有異常,就返回true,否則更新失敗,返回false。

notifyPending方法裡面會喚醒執行緒。

回撥方法流程完全相同,在此就不論述了。

6.4 notifyChange

實際上,除了開機,插拔SIM卡會從聯絡人資料庫中同步/刪除SIM卡聯絡人之外,SIM卡中聯絡人的更新/刪除/增加操作不僅會更新SIM卡聯絡人,而且也會將這些聯絡人同步到聯絡人資料庫中,最後通過LoaderManager機制載入到介面顯示出來。

相關推薦

SIM --- 聯絡人增加/刪除/更新 分析

3.2 更新 insert/ delete/ update 三個方法執行的流程幾乎完全相同,以update方法為例進行論述。 update方法主要邏輯如下, 1,根據不同型別為引數賦值, case ADN: efType = IccConstants.EF_ADN;

資料庫中刪除SIM聯絡人

4,SIM卡聯絡人 Contacts2.db資料庫中聯絡人其實包括2部分,手機上面的聯絡人以及SIM卡中的聯絡人。 當然, SIM卡中的聯絡人是儲存在單獨的資料庫中,其對應的Provider為IccProvider,在packages\services\Telephony

C# 增加 刪除 更新 方法

ide 影響 返回 return color 行數 class 增加 .exe /// <summary> /// 增加一條數據 /// </summary> public int Add(strin

查詢SIM聯絡人——原始碼流程簡介

查詢SIM卡聯絡人 查詢SIM卡中的聯絡人使用的方法為 query( ) 方法,與操作資料庫中的查詢方法極其類似,使用方式與如下類似: getContentResolver().query("content://icc/adn/subId/1", nul

android中對sim聯絡人的增刪改查以及監聽sim聯絡資料的改變

sim卡聯絡人的增刪改查主要是通過ContentProvider來進行操作的,在android中對sim卡聯絡人操作的provider是定義在IccProvider.java這個類中的,這個類位於android原始碼的位置frameworks/base/telephony/

資料庫中同步SIM聯絡人

4.2 同步聯絡人 當重新插入SIM卡時, SimContactsService 的onCreate方法內的匿名Handler的handleMessage方法對應的處理如下, case MSG_SIM_REFRESH: ••• if (mSimState[sub] == S

android讀取sim聯絡人

SIM的provider是IccProvider。既然是provider,就和操作Contact的provider類似的,只是有一些微小差別。 IccProvider的Uri是content://icc/and,可以通過這個Uri來操作SIM卡。當然,使用時需要轉換為an

獲取android手機了通訊錄和sim聯絡人

private ArrayList<SamContact> getAllContacts(){ArrayList<SamContact> arrayList = new ArrayList<SamContact>();//獲取本機聯絡人C

Android SIM聯絡人操作總結

--- by Ruiming.Lv 在Android中,對SIM中的聯絡人進行操作,需要通過系統提供的Content Provider進行,該Provider就是Telphony中的IccProvider。但是,由於SIM卡儲存的一些特性,在操作上,與ContactsP

Mybatis的應用2 使用mybits+SpringBoot完成第一個查詢的demo(隨後加增加更新刪除

添加 span string nco 返回 一個數 .config 地址 slf4 首先在mapper下面新建一個mysql.xml mysql.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP

Spring boot集成Redis(1)—進行增加更新,查詢,批量刪除等操作

緩存 獲取數據 prope XML ray end 序列 www pin 前言:最近工作中使用到了redis緩存,故分享一點自己總結的東西,這篇文章使用的是StringRedisTemplate進行學習,這裏值的說的是,(1)StringRedisTemplate在進行批量

Android---操作SIM聯絡人的影響(二)

前言 今天整理一下關於在Contacts中通過Setting進行Import/Export SIM卡聯絡人的過程。同樣,原始碼分析基於Android8高通平臺。 Import過程 Import過程是指將SIM卡中的聯絡人匯入(copy)到本地賬號中,需要強調的一

JDBC增刪改查--資料庫增加刪除更新、查詢例項

package cn.com.JDBC; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; pu

SIM上的聯絡人匯入Android手機中

新購買Android手機的朋友第一件事情可能就是需要將SIM卡上的聯絡人匯入到手機中,但是許多朋友卻不知道如何將聯絡人從SIM卡匯入到新購買的Android手機上,為此在這裡我們有必要給大家介紹下如何快速將SIM卡聯絡人匯入到手機中。 對於許多朋友的提問,我們並無

Yii資料庫操作增刪改查-[增加\查詢\更新\刪除 AR模式]

本人小菜鳥一隻,為了自我學習和交流PHP(jquery,linux,lamp,shell,javascript,伺服器)等一系列的知識,小菜鳥建立了一個群。希望光臨本部落格的人可以進來交流。尋求共同

Android工具類—— android 從SIM獲取聯絡人資訊

<span style="font-size:18px;color:#3333ff;">01./**   02.     * 從SIM卡中讀取聯絡人資訊   03.     * @r

SIM中獲取聯絡人資訊

Uri uri = Uri.parse("content://icc/adn"); String[] projection = {"_id", "name", "number"}; Cursor cursor = managedQuery(uri, projection,

Android 4.4Telephony流程分析SIM開機時的資料載入

本文程式碼以MTK平臺Android 4.4為分析物件,與Google原生AOSP有些許差異,請讀者知悉。 本文主要介紹sim卡資料的讀取過程,當射頻狀態處於準備狀態時,此時UiccCardApplication應處於AppState.APPSTATE_READ

Android原始碼----操作SIM聯絡人的影響(一)

前言 SIM(Subscriber Identification Module )卡:也稱為使用者身份識別卡、智慧卡,GSM數字行動電話機必須裝上此卡方能使用。SIM卡有很多功能,其中有一項是儲存使用者相關資料,這些資料主要分為五類:第一類是固定存放的資料,這類

MICRO SIM(SIM)尺寸圖及剪圖解

pan avi watermark water http 輪廓 ack 壁紙 img 如今使用MICRO SIM卡的手機越來越多。近期剛剛買了一個手機到手才發現尼馬使用的是MICRO SIM卡。再去買剪卡器吧,十幾二十塊用一次就廢了,去營業廳吧。又比較遠,懶的出門。怎麽