青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

franksunny的個人技術空間
獲得人生中的成功需要的專注與堅持不懈多過天才與機會。 ——C.W. Wendte

 

Symbian OS應用開發學習筆記之通訊錄(電話薄Contacts

 

Symbian OS通訊錄模型

Symbian OS手機的通訊錄采用文件方式存儲,用symbian自己的說法就是通訊錄數據庫。每個Symbian OS手機都有一個默認的通訊錄數據庫,這個通訊錄數據庫在2nd3rd兩個版本手機中的位置是不同的,前者是c\ system\data\Contacts.cdb,后者是c\private\100012a5\DBS_100065FF_Contacts.cdb。不管怎么說兩者都在內部閃存中,也就是跟優盤差不多的介質,由于symbian OS的文件系統暫時還沒有仔細拜讀過,所以具體差別暫不知,總之掉電不會失去就是了。

Symbian OS的手機通訊錄在開發上的操作依靠Symbian OS通訊錄模型(Contacts Model)來實現。通訊錄模型由通訊錄數據庫、通訊錄條目(項)和通信錄域三者組成,他們之間的關系是:一個手機除了系統自帶的默認通訊錄數據庫外還可以帶多個通訊錄數據庫;一個通訊錄數據庫有多個通訊錄條目組成,這里每個條目就是每個聯系人,具體數量限制各個手機應該不一樣;而一個通訊錄條目又有多個通訊錄域組成,好比有姓名、工作手機號碼、家庭手機號碼等等,每個項就是一個域。

在這里Symbian為了統一通訊錄格式,所以將通訊錄條目采用vCard格式MIME規范(RFC 1521)所定義的明碼文本來定義域,具體的vCard簡單介紹見附錄。

 

Symbian OS通訊錄操作API

知道了Contacts Model的概念,Symbian OS將很多系統API操作封裝為幾個類:

CContactDatabase(數據庫類):負責新建、打開、關閉等基本數據庫操作外,還負責數據庫更新(通訊錄條目的新建、修改、刪除需要通過CContactDatabase類的操作才能實現)、排序和查找,另外還有一些建立快速撥號之類的操作也是通過它來實現。

CContactItem(通訊錄條目類):由唯一的一個TContactItemId(一個TInt32類型的宏定義)標識,負責具體一個通訊錄條目的創建、修改,其直接管理每一個通訊錄域

CContactItemField(域類):每一個域就是一個真實單一的數據,該數據的類型具有存儲類型(TStorageType)和域類型(TFieldType)同時決定,具體的四種存儲類型和多種域類型定義見系統頭文件cntdef.h內的定義。

當然還有很多其它的類,比如CContactItemFieldSet(域集類)、CContactFieldStorage(與存儲基類)、CContactTextFields(文本存儲域類)、MContactDbObserver(通訊數據庫觀察類)等等,涉及面太大,具體也不能憑空說清楚,代碼中出現就知道了。

 

Symbian OS通訊錄操作實例

例1、       打開和關閉數據庫

CContactDatabase::OpenL()函數有兩個重載函數。如果該函數沒有給出一個參數,就打開默認的數據庫。另一種情況是,應用軟件設計師也可以傳遞一個有關數據庫的路徑和文件名,規定打開一個指定數據庫。

//打開默認數據庫

CContactDatabase* contactsDb = CContactDatabase::OpenL();

CleanupStack::PushL(contactsDb);

//取得當前數據庫所有通訊條目數

TInt numberOfContacts = contactsDb->CountL();

//釋放數據庫

CleanupStack::PopAndDestroy(contactsDb);

要注意的是:某個通信錄數據庫并不具有Close()函數或類似的函數,否則我們壓入清除棧時就得用CleanupClosePushL()函數了。

 

例2、       創建數據庫

CContactDatabase::CreateL()函數與CContactDatabase::ReplaceL()函數之間的唯一差別就是:如果該數據庫已經存在,前者會以KErrAlreadyExists退出。如前所述,如果沒有定義參數,這些函數將創建一個默認的數據庫。CContactDatabase::FindContactFile()函數給出了一個描述符,如果不存在默認數據庫的話,該描述符就會返回該默認數據庫的位置。

// If one is found, replace it with a new empty default database.

// If no default database is found, create a new one.

TFileName contactDbFilePath;

CContactDatabase* newDefaultContactDb;

//是否存在默認數據庫

if(CContactDatabase::FindContactFile(contactDbFilePath))

{

 newDefaultContactDb = CContactDatabase::ReplaceL();

}

else

{

 newDefaultContactDb = CContactDatabase::CreateL();

}

CleanupStack::PushL(newDefaultContactDb);

// 添加自己功能代碼

CleanupStack::PopAndDestroy(newDefaultContactDb);

注:以上代碼負責創建一個空的默認數據庫。

 

例3、       讀?。ū闅v)通訊錄條目

可以用TContactIter類(該類起到數據庫操作中類似游標的作用)來遍歷一個通信錄數據庫。這個類提供了一整套的函數,用于遍歷所有的通信錄項。所有的函數都用通信錄項ID (TContactItemId) 進行操作,該ID 用于訪問某個特定的通信錄項。

// Open the default contacts database:

CContactDatabase* contactsDb = CContactDatabase::OpenL();

CleanupStack::PushL(contactsDb);

TContactIter iter(*contactsDb);

TContactItemId cardId;

//循環遍歷

while( ( cardId = iter.NextL() ) != KNullContactId )

{

//讀取相應項,這里之所以稱其card,就是其實際相當于讀一個完整的vCard條目

CContactItem* card = contactsDb->ReadContactL(cardId);

CleanupStack::PushL(card);

 

//添加自己功能代碼

//……

contactsDb->CloseContactL(card->Id());

CleanupStack::PopAndDestroy(); // card

}

CleanupStack::PopAndDestroy(); // contactsDb

 

 

例4、       新建通訊錄條目

// 字符串聲明

_LIT(KForenameLabel,"Forename");//中文“名”

_LIT(KSurnameLabel,"Surname"); //中文“姓”

_LIT(KWorkPhoneLabel,"Work Phone");

_LIT(KForename,"Steve");

_LIT(KOtherForename,"Bob");

_LIT(KSurname,"Wilkinson");

_LIT(KWorkPhone,"+441617779700");

//以上定義的字符串,在以后例子中將直接使用,不再重新進行定義了

//打開默認數據庫

CContactDatabase* contactsDb = CContactDatabase::OpenL();

CleanupStack::PushL(contactsDb);

// 建立一個新條目

CContactItem* contact = CContactCard::NewLC();

//創建一個新的文本存儲類型的姓域

CContactItemField* field =

CContactItemField::NewLC(KStorageTypeText, KUidContactFieldFamilyName);

//將姓域建立與vCard的映射

field->SetMapping(KUidContactFieldVCardMapUnusedN);

//設置域標簽

field->SetLabelL(KSurnameLabel);

//設置域值

field->TextStorage()->SetTextL(KSurname);

//把該域加入到新建的條目中

contact->AddFieldL(*field);    

CleanupStack::Pop();

 

//添加文本存儲類型的名域

field=CContactItemField::NewLC(KStorageTypeText, KUidContactFieldGivenName);

field->SetMapping(KUidContactFieldVCardMapUnusedN);

field->SetLabelL(KForenameLabel);

field->TextStorage()->SetTextL(KForename);

contact->AddFieldL(*field); 

CleanupStack::Pop();

 

//添加文本存儲類型的手機號碼域

field=CContactItemField::NewLC(KStorageTypeText, KUidContactFieldPhoneNumber);

field->SetMapping(KUidContactFieldVCardMapTEL);

field->SetLabelL(KWorkPhoneLabel);

field->TextStorage()->SetTextL(KWorkPhone);

contact->AddFieldL(*field); 

CleanupStack::Pop();

 

//把建立的新記錄添加到數據庫中

contactsDb->AddNewContactL(*contact);

contactsDb->SetOwnCardL(*contact);

CleanupStack::PopAndDestroy(2); // contact contactsDb

 

例5、       查找并更新通訊錄條目

這個例子比較復雜,涉及的查找函數為FindAsyncL,該類函數實例有:

CContactIdArray * CContactDatabase::FindLC(const TDesC &aText, const CContactItemFieldDef *aFieldDef);

CIdleFinder * CContactDatabase::FindAsyncL(const TDesC &aText, const CContactItemFieldDef *aFieldDef, MIdleFindObserver *aObserver);

還有對應的FindInTextDefLC()FindInTextDefAsyncL()各兩組,具體參見sdk

下面是具體代碼實例:

CContactDatabase*  iContactsDb = CContactDatabase::OpenL();

CleanupStack::PushL(iContactsDb);

CContactItemFieldDef*  iFieldDef = new (ELeave)CContactItemFieldDef();

CleanupStack::PushL(iFieldDef);

iFieldDef->AppendL(KUidContactFieldGivenName);

iFieldDef->AppendL(KUidContactFieldFamilyName);

_LIT(KFindToken, "Bond");

CIdleFinder * iFinder = iContactsDb->FindAsyncL( KFindToken, iFieldDef, this);

CleanupStack::PushL(iFinder);

if(iFinder->IsComplete())

   {

if(iFinder->Error() == KErrNone)

        {

CContactIdArray* result = iFinder->TakeContactIds();

CleanupStack:: PushL(result);

for(TInt i=0; i<result->Count(); i++)

   {

TContactItemId cardId = (*result)[i];

CContactItem* ownCard = iContactsDb ->OpenContactL(cardId);

CleanupStack::PushL(ownCard);

TInt index =

ownCard->CardFields().Find(KUidContactFieldGivenName);

ownCard->CardFields()[index].TextStorage()->SetTextL(KOtherForename);

//提交所做的修改,如果這里不做更改可以調用CloseContactL直接關閉

//但是一旦用OpenContactLOpenContactLX打開就必須調用兩者之一關閉

iContactsDb ->CommitContactL(*ownCard);

CleanupStack::PopAndDestroy();// ownCard

}

CleanupStack::PopAndDestroy();//result;

          }

}

CleanupStack::PopAndDestroy(3);// iContactsDbiFieldDef、iFinder

 

例6、       導出所選通訊錄條目到文件(vCard)

在這里,主要使用CContactDatabase類中ExportSelectedContactsL函數,關于該函數的定義可以查看SDK文檔;而且在這里與前次遍歷不一樣的是,加了一個過濾器CCntFilter類,雖然取法仍然是所有通訊條目,但做法不一樣,具體例程如下:

RFs fileSession;

//連接文件服務器

User::LeaveIfError(fileSession.Connect());

CleanupClosePushL(fileSession); //1

//打開默認數據庫

CContactDatabase* contactDb = CContactDatabase::OpenL();

CleanupStack::PushL(contactDb); //2

//新建過濾器

CCntFilter* filter = CCntFilter::NewLC(); //3

filter->SetContactFilterTypeALL(EFalse);

//vCard格式導出

filter->SetContactFilterTypeCard(ETrue);

//安裝filter

contactDb->FilterDatabaseL(*filter);

//取出滿足條件的記錄數據項數組

CContactIdArray* exportContact = CContactIdArray::NewL(filter->iIds);

CleanupStack::PushL(exportContact); //4

 

RFile file;

//新建文件,aFileName是文件名字

file.Replace(fileSession,aFileName,EFileWrite);

CleanupClosePushL(file); //5

//聲明文件流

RFileWriteStream outputStream(file);

CleanupClosePushL(outputStream); //6

 

TUid id;

id.iUid = KVersitEntityUidVCard;

//導出到文件

contactDb->ExportSelectedContactsL(id,*exportContact, aWriteStream,
CContactDatabase::EExcludeUid);

CleanupStack::PopAndDestroy(6,contactDb);

 

Symbian S60獨有通訊錄操作API引擎

以上是適用于任何Symbian OS通訊錄操作的方法,在S60平臺SDKnokia專門為我們建立了一個操作通訊錄的引擎,以及相對應的產生了一些封裝的類:

CPbkContactEngine(通訊錄引擎類):如果已經存在一個缺省數據庫,CPbkContactEngine::NewL()就連接到該數據庫,否則創建該數據庫。當然也可以傳入文件名,打開一個指定的通訊錄數據庫,根據頭文件cpbkcontactengine.h,他就是對CContactDatabase和觀察器類MContactDbObserver封裝了下并進行了一些優化,簡便了我們操作時的一些代碼,為此操作起來比較方便。

CPbkContactItem(通訊錄條目類):該類頭文件是CPbkContactItem.h,主要對通訊錄條目類CContactItem的封裝和優化,可以看出很多導出函數都是一致的。

TPbkContactItemField(域類):不用想也知道這個類是怎么來的了,該類的頭文件tpbkcontactitemfield.h。有興趣的可以去研究比照一下。

當然也有其他一些封裝的類,只不過離通訊錄模型比較遠的,我們就不多展開了,在例子中看其使用。

例7、       新建通訊錄條目

_LIT(KFName,"King");

_LIT(KLName,"Chai");

_LIT(KNumber,"13777777777");

//運用引擎打開默認通訊錄

CPbkContactEngine* iPbkContactEngine = CPbkContactEngine::NewL();

CleanupStack::PushL(PbkContactEngine);//1

//新建一空通信錄項

CPbkContactItem* contact = iPbkContactEngine->CreateEmptyContactL();

CleanupStack::PushL(contact); //2

//設置first name

TPbkContactItemField* field = contact->FindField(EPbkFieldIdFirstName);

CleanupStack::PushL(contact); //3

field->TextStorage()->SetTextL(KFName);

//設置last name

field = contact->FindField(EPbkFieldIdLastName);

field->TextStorage()->SetTextL(KLName);

//設置手機號碼域

field = contact->FindField(EPbkFieldIdPhoneNumberMobile);

field->TextStorage()->SetTextL(KNumber);

//可以添加其他值域

//...

//修改后結果添加到數據庫中,并返回這個通信錄項的id,該id可以以后使用

TContactItemId Id = iPbkContactEngine->AddNewContactL(*contact);

CleanupStack::PopAndDestroy(3);

以上代碼是否比例4的代碼相對來說更簡單些???

 

例8、       修改通訊錄條目

實現修改和新建的代碼類似,不同是你需要找到你要修改的通訊錄條目aContactId,然后找到要修改的域進行修改,最后導入數據庫。

_LIT(number,"13500000000");

TBuf<11> phonenumber(number);

CPbkContactEngine* iPbkContactEngine = CPbkContactEngine::NewL();

CleanupStack::PushL(PbkContactEngine);//1

//這里打開條目后加鎖,以防其它客戶端打開

CPbkContactItem* contact = iPbkContactEngine->OpenContactLCX(aContactId);

CleanupStack::PushL(contact); //2

//找到需要修改的field

TPbkContactItemField* field = contact->FindField(EPbkFieldIdPhoneNumberMobile);

CleanupStack::PushL(field); //3

//設置并確認修改

field->TextStorage()->SetTextL(phonenumber);

iPbkContactEngine ->CommitContactL(*contact);

CleanupStack::PopAndDestroy(2)

 

 

 

 

 

 

 

附錄vCard

手機應用開發中經常會遇到有關OBEX協議的問題,其實在通信錄開發中也遵循這個協議,通信錄中的數據是存在一個名叫vCard的載體里vCard是一類電子名片,得到許多電子設備(如PDA和移動電話等)的支持。vCard的目的是:在這些設備之間用某些協議實現方便的通信錄數據傳遞??梢詫?span lang=EN-US>vCard編碼成MIME規范(RFC 1521)所定義的明碼文本。這種編碼確保了各種vCard與限制為7位字符集(如在SMS消息中使用的編碼)的傳遞編碼的完全兼容。

一張vCard被格式化如下(說實話,下面這個vCard我也沒看懂,有看懂的幫忙解釋下):

BEGIN:VCARD

VERSION:2.1

N:Wilkinson;Steve

FN:Steve Wilkinson

ORG:EMCC Software Ltd.

TEL;WORK;VOICE:01617779700

ADR;WORK;ENCODING=QUOTED-PRINTABLE:;;108 Manchester

d.=0D=0ACarrington;Manchester;UK;M31 4BD;United Kingdom LABEL;WORK;ENCODING=QUOTED-PRINTABLE:108 Manchester Rd.=0D=0ACarrington=0D=0AManchester, UK M31 4BD=0D=0AUnited K= ingdom

EMAIL;PREF;INTERNET:steve.wilkinson@emccsoft.com

REV:20030909T164330Z

END:VCARD

通信錄模型中的許多功能都與vCard的處理有關,以保證Symbian應用開發伙伴們能方便地編制符合電子名片及通訊錄交換方面的工業標準的代碼。

 

致謝:

全文暫告一個段落,應該說自己書都沒有看過,主要參考了網上一些人整理的文章,感謝csdn的風之云的玩轉通訊錄(http://blog.csdn.net/welcome_ck/archive/2005/01/06/242686.aspx),本文原型主要來自于他,另外還參考了兩篇代碼文檔,一篇用C++實現的訪問Symbian手機電話?。ǔ鎏?span lang=EN-US>http://jcszjswkzhou.itpub.net/post/32804/369208),另一篇忘了出處。由于很多例子本人只是走讀改進了下,還未來得及親測,所以如果有網友親測了某些實例,通不過還望能告知下,當然小筆在用到的時候也會親測下,在此謝過以上三人,當然還要感謝公司和兩位同事,并先感謝有時間來親測的網友。

另:轉載煩請注明http://m.shnenglu.com/franksunny/,以便更多的學習交流
posted on 2008-06-27 08:05 frank.sunny 閱讀(6447) 評論(8)  編輯 收藏 引用 所屬分類: symbian 開發

FeedBack:
# re: Symbian OS應用開發學習筆記之通訊錄(電話薄Contacts)
2008-07-01 12:55 | 企業即時通訊
謝謝,也在研究。  回復  更多評論
  
# re: Symbian OS應用開發學習筆記之通訊錄(電話薄Contacts)
2009-04-14 15:42 | 子劍
謝謝你的文章,收益匪淺。  回復  更多評論
  
# re: Symbian OS應用開發學習筆記之通訊錄(電話薄Contacts)
2009-05-22 12:07 | Ray.W
可不可以留個QQ,我再用Symbian做通訊錄的畢業設計,有很多不懂的地方想請教。  回復  更多評論
  
# re: Symbian OS應用開發學習筆記之通訊錄(電話薄Contacts)
2009-05-22 12:08 | Ray.W
或是直接架下64018558,謝謝  回復  更多評論
  
# re: Symbian OS應用開發學習筆記之通訊錄(電話薄Contacts)
2009-05-31 20:38 | dikesky
64018558 需要驗證。。。。
我加不上你。。
我現在有此問題想請教你。。。。  回復  更多評論
  
# re: Symbian OS應用開發學習筆記之通訊錄(電話薄Contacts)
2009-06-21 11:43 | 鄭永
你好,請問你有辦法做出一個小小的字典么?上面有輸入框,輸入內容就會立即顯示內容,就像字典一樣,這個只是剛開始,最重要的是:在輸入框里面可以調用quickmark的解碼api調用,我不會用,不過你可以看這里,他們公司已經有提供代碼http://www.quickmark.cn/cht/tech/t27.asp 如果你有辦法做出來,我可以考慮給你買,謝謝,我的QQ是:25812739,如果會,記得聯系我,我匯款給你。  回復  更多評論
  
# re: Symbian OS應用開發學習筆記之通訊錄(電話薄Contacts)
2010-04-09 16:50 | shiwl111
在設置域類型的時候只寫手機和firstname lastname,沒寫workPhone ,homePhone等等,可以寫出來共享一下嗎?  回復  更多評論
  
# re: Symbian OS應用開發學習筆記之通訊錄(電話薄Contacts)
2010-04-09 18:30 | frank.sunny
好久沒來了,不知道你指的是啥意思
  回復  更多評論
  

常用鏈接

留言簿(13)

隨筆分類

個人其它博客

基礎知識鏈接

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久综合九色综合网站| 一区二区三区精品视频| 亚洲国产欧美日韩另类综合| 欧美日韩国产成人在线| 老色鬼精品视频在线观看播放| 国产精品99久久久久久www| 日韩视频专区| 亚洲影院免费| 亚洲欧美日本另类| 性感少妇一区| 乱人伦精品视频在线观看| 久久阴道视频| 欧美日韩国产另类不卡| 国产精品v欧美精品v日本精品动漫| 欧美成人国产一区二区| 久久青草福利网站| 欧美久久综合| 经典三级久久| 亚洲午夜在线| 麻豆国产精品777777在线| 亚洲欧洲综合| 黄色av成人| 99精品视频免费全部在线| 欧美一级专区免费大片| 欧美高清视频在线播放| 亚洲一级网站| 欧美精品在线一区| 韩日欧美一区| 国产精品一区二区视频| 国产久一道中文一区| 91久久极品少妇xxxxⅹ软件| 亚洲视频一区在线| 亚洲黄色毛片| 欧美风情在线观看| 亚洲毛片在线免费观看| 欧美va亚洲va国产综合| 久久亚洲一区| 91久久黄色| 亚洲美女在线看| 国产精品国产精品国产专区不蜜| 9久草视频在线视频精品| 免费不卡在线观看av| 欧美自拍偷拍午夜视频| 国产欧美一区二区精品忘忧草| 欧美国产精品劲爆| 老司机免费视频一区二区三区| 久久久久久久久久久一区| 亚洲福利国产| 国产精品99久久久久久久久 | 国产婷婷精品| 国产精品视频内| 快she精品国产999| 欧美成人精品h版在线观看| 亚洲精品影院在线观看| 国产精品高清免费在线观看| 亚洲激情成人网| 欧美在线观看日本一区| 亚洲一区二区欧美日韩| 国内免费精品永久在线视频| 麻豆久久精品| 国产精品白丝jk黑袜喷水| 亚洲婷婷综合久久一本伊一区| 一区二区欧美精品| 黄色一区三区| 日韩一区二区高清| 亚洲一区二三| 亚洲午夜精品17c| 欧美久久精品午夜青青大伊人| 国产精品狼人久久影院观看方式| 国产一区二区视频在线观看| 久久久久在线| 农夫在线精品视频免费观看| 在线观看国产日韩| 亚洲久色影视| 国产日韩欧美91| 亚洲精品极品| 国产日产欧美精品| 欧美韩日一区二区| 国产精品天天看| 亚洲精品乱码久久久久久黑人 | 欧美视频在线视频| 麻豆精品视频在线观看| 欧美体内she精视频| 亚洲国产精品热久久| 亚洲成人资源| 亚洲欧美日韩中文视频| 久久久精品国产99久久精品芒果| 亚洲欧美日韩精品| 国产一区二区0| 亚洲欧美日韩一区二区三区在线| 99精品热视频| 欧美婷婷久久| 欧美在线三区| 在线亚洲一区观看| 夜夜爽av福利精品导航| 免费不卡视频| 暖暖成人免费视频| 亚洲国产精品高清久久久| 久久成人精品一区二区三区| 欧美在线视频二区| 国产曰批免费观看久久久| 欧美一区二区三区精品| 久久久一区二区| 亚洲精品乱码久久久久| 久久一区中文字幕| 欧美国产日韩一区二区| 亚洲每日更新| 国产精品久久久久久久app| 亚洲一区区二区| 欧美大片免费| 亚洲自拍偷拍视频| 136国产福利精品导航网址| 欧美日韩国产91| 一本色道久久综合亚洲91| 久久精选视频| 一区二区三区欧美视频| 国产日韩av一区二区| 欧美大片在线看| 欧美亚洲一级| 亚洲精品国产精品国自产观看| 久久久精品一区二区三区| 一区二区激情视频| 91久久精品日日躁夜夜躁国产| 国产模特精品视频久久久久| 欧美大片免费观看| 欧美成人免费网站| 亚洲国产精彩中文乱码av在线播放| 久久亚洲欧美国产精品乐播| 久久青青草综合| 一区二区三区欧美| 亚洲国产综合在线| 亚洲精品少妇| 亚洲精品一二三| 亚洲高清资源| 宅男噜噜噜66一区二区| 亚洲电影在线看| 亚洲国产成人91精品| 美女日韩在线中文字幕| 久久精品人人做人人综合| 欧美中文字幕第一页| 欧美在线视频不卡| 欧美电影电视剧在线观看| 亚洲第一天堂av| 中文日韩在线视频| 久久久精品日韩| 乱中年女人伦av一区二区| 国产精品日本欧美一区二区三区| 国产日韩综合| 午夜一级在线看亚洲| 亚洲摸下面视频| 亚洲欧美视频在线观看| 久久久久.com| 国产精品高精视频免费| 在线不卡中文字幕播放| 亚洲欧美日韩网| 亚洲高清网站| 久久精品日产第一区二区| 欧美日韩亚洲91| 影音先锋欧美精品| 亚洲性图久久| 亚洲国产二区| 欧美日韩国产黄| 日韩亚洲在线观看| 91久久久在线| 欧美日韩国产首页在线观看| 亚洲国产一区二区三区高清 | 亚洲一区二区三区在线视频| 欧美成人按摩| 久久久综合精品| 精品动漫3d一区二区三区免费版 | 中文网丁香综合网| 国产精品美女主播| 久久成人综合网| 久久国产精品72免费观看| 亚洲国产成人久久| 一二三区精品| 中文亚洲字幕| 宅男精品导航| 国产一区二区精品| 久久久综合视频| 久久亚洲综合色| 亚洲午夜精品一区二区| 亚洲高清不卡av| 欧美午夜视频在线| 久久久中精品2020中文| 欧美精品日韩综合在线| 久久婷婷久久一区二区三区| 欧美色图天堂网| 欧美成人综合网站| 国产精品日韩一区二区| 一区二区三区波多野结衣在线观看| 欧美精品情趣视频| 99在线精品观看| 欧美亚洲免费| 亚洲私拍自拍| 欧美成人第一页| 久久精品色图| 国产精品福利久久久| 欧美激情va永久在线播放| 国产欧美另类|