Working With Android Contacts.docx

上传人:b****4 文档编号:11535446 上传时间:2023-03-19 格式:DOCX 页数:36 大小:25.04KB
下载 相关 举报
Working With Android Contacts.docx_第1页
第1页 / 共36页
Working With Android Contacts.docx_第2页
第2页 / 共36页
Working With Android Contacts.docx_第3页
第3页 / 共36页
Working With Android Contacts.docx_第4页
第4页 / 共36页
Working With Android Contacts.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

Working With Android Contacts.docx

《Working With Android Contacts.docx》由会员分享,可在线阅读,更多相关《Working With Android Contacts.docx(36页珍藏版)》请在冰豆网上搜索。

Working With Android Contacts.docx

WorkingWithAndroidContacts

IntroductionToAndroidContacts

LearntoworkwiththeAndroidcontactsdatabase.BasicknowledgeofaccessingSQLiteinAndroidalongwithusingCursorsisexpected.Seethe AndroidSQLiteandCursorArticle formoreinformation.Googlechangedthecontactsdatabasemovingfrom1.xto2.0versionsofAndroid.Thistutorialwillbebrokeninto3sections.FirstcoveringaccessingcontactsinAndroid2.0.ThesecondpagewilldealwithaccessingthecontactsinAndroid1.6andbefore.Thirdwe'llglueitalltogetherwithaclassthatabstractsspecificclassesforeachversionandasetofclassestomanagethedatafromthecontactrecords.

CreateanewprojectcalledTestContactsinEclipsesetupforAndroid2.0.

AndroidContactAPIFor2.0

GrantingAccess

BeforeanapplicationcanquerythecontactrecordsaccessmustbegrantedthroughtheAndroidManifest.xmlfilestoredintherootoftheproject.Addthefollowinguses-permissionbelowstheuses-sdkstatement. 

name="android.permission.READ_CONTACTS"/>

QueryingTheAndroidContactDatabase

RetrievingContactDetails

BasiccontactinformationstoredinContactstablewithdetailedinformationstoredinindividualtablesfornormalization.InAndroid2.0toquerythebasecontactrecordstheURItoqueryisstoredinContactsContract.Contacts.CONTENT_URI. 

packagehigherpass.TestContacts;

importandroid.app.Activity;

importandroid.content.ContentResolver;

importandroid.database.Cursor;

importandroid.os.Bundle;

importandroid.provider.ContactsContract;

publicclassTestContactsextendsActivity{

/**Calledwhentheactivityisfirstcreated.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ContentResolvercr=getContentResolver();

Cursorcur=cr.query(ContactsContract.Contacts.CONTENT_URI,

null,null,null,null);

if(cur.getCount()>0){

while(cur.moveToNext()){

Stringid=cur.getString(

cur.getColumnIndex(ContactsContract.Contacts._ID));

Stringname=cur.getString(

cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

if(Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))>0){

//Queryphonehere.Coverednext

}

}

}

}

}

ThisapplicationstartsoffasanyotherAndroidapplication.FirstcreateaContentResolverisntanceincr.ThenusetheContentResolverinstancetoquerythedatabaseandreturnaCursorwiththecontactslist.ThequeryisperofrmedagainsttheURIstoredinContactsContract.Contacts.CONTENT_URI.Nextcheckifthecursorcontainsrecordsandifsoloopthroughthem.TherecordIDfieldisstoredintheidvariable.Thiswillbeusedasawhereparameterlater.Alsothedisplaynamefieldisstoredinthestringname.Formoredetailsaboutworkingwithcursorssee AndroidCursorsTutorial.

PhoneNumbers

Phonenumbersarestoredintheirowntableandneedtobequeriedseparately.ToquerythephonenumbertableusetheURIstoredintheSDKvariableContactsContract.CommonDataKinds.Phone.CONTENT_URI.UseaWHEREconditionaltogetthephonenumbersforthespecifiedcontact. 

if(Integer.parseInt(cur.getString(

cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))>0){

CursorpCur=cr.query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI,

null,

ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?

",

newString[]{id},null);

while(pCur.moveToNext()){

//Dosomethingwithphones

}

pCur.close();

}

PerformasecondqueryagainsttheAndroidcontactsSQLitedatabase.ThephonenumbersarequeriedagainsttheURIstoredinContactsContract.CommonDataKinds.Phone.CONTENT_URI.ThecontactIDisstoredinthephonetableasContactsContract.CommonDataKinds.Phone.CONTACT_IDandtheWHEREclauseisusedtolimitthedatareturned.

EmailAddresses

Queryingemailaddressesissimilartophonenumbers.Aquerymustbeperformedtogetemailaddressesfromthedatabase.QuerytheURIstoredinContactsContract.CommonDataKinds.Email.CONTENT_URItoquerytheemailaddresstable. 

CursoremailCur=cr.query(

ContactsContract.CommonDataKinds.Email.CONTENT_URI,

null,

ContactsContract.CommonDataKinds.Email.CONTACT_ID+"=?

",

newString[]{id},null);

while(emailCur.moveToNext()){

//Thiswouldallowyougetseveralemailaddresses

//iftheemailaddresseswerestoredinanarray

Stringemail=emailCur.getString(

emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));

StringemailType=emailCur.getString(

emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));

}

emailCur.close();

AswiththephonequerythefieldnamesfortheemailtablearealsostoredunderContactsContract.CommonDataKinds.TheemailqueryisperformedontheURIinContactsContract.CommonDataKinds.Email.CONTENT_URIandtheWHEREclausehastomatchtheContactsContract.CommonDataKinds.Email.CONTACT_IDfield.SincemultipleemailaddressescanbestoredloopthroughtherecordsreturnedintheCursor.

Notes

Customnotescanbeattachedtoeachcontactrecord.AsbeforethesearestoredinaseparatetableandarerelatedbasedonthecontactID. 

StringnoteWhere=ContactsContract.Data.CONTACT_ID+"=?

AND"+ContactsContract.Data.MIMETYPE+"=?

";

String[]noteWhereParams=newString[]{id,

ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE};

CursornoteCur=cr.query(ContactsContract.Data.CONTENT_URI,null,noteWhere,noteWhereParams,null);

if(noteCur.moveToFirst()){

Stringnote=noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE));

}

noteCur.close();

NotesarestoredintheAndroidContactsgenericdatatable.WhenaccessingspecificdatatheWHEREclausewillneed2conditionals.FirstthestandardcontactID,secondaMIMETYPEforthedatathatisbeingrequested.TheAndroidSDKcomeswithaseriesofauto-generatedvariablesthattakecareofthis.UsetheContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPEvariabletolimitthequerytonoterecords.ThedatatableURIisstoredatContactsContract.Data.CONTENT_URI.FinallythenotefieldnameisstoredinContactsContract.CommonDataKinds.Note.NOTE.

PostalAddresses

Androidcanstoremultiplepostaladdressespercontact.AddressesarealsostoredinthedatatablelikenotesandqueriedviatheURIstoredinContactsContract.Data.CONTENT_URI.SimilartothenotesqueryaMIMETYPEmustbeaddedtotheWHEREconditional.AlsoinAndroid2.0theAddressrecordwassplitintomultiplefieldscontainingdifferentpartsoftheaddress(PO-Box,stree,city,region,postalcode).InearlierversionsoftheAndroidSDKthiswasafree-formstringstorage. 

StringaddrWhere=ContactsContract.Data.CONTACT_ID+"=?

AND"+ContactsContract.Data.MIMETYPE+"=?

";

String[]addrWhereParams=newString[]{id,

ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE};

CursoraddrCur=cr.query(ContactsContract.Data.CONTENT_URI,

null,where,whereParameters,null);

while(addrCur.moveToNext()){

StringpoBox=addrCur.getString(

addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));

Stringstreet=addrCur.getString(

addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));

Stringcity=addrCur.getString(

addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));

Stringstate=addrCur.getString(

addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));

StringpostalCode=addrCur.getString(

addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));

Stringcountry=addrCur.getString(

addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));

Stringtype=addrCur.getString(

addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));

}

addrCur.close();

Thiscodeissimilartothepreviousexample.NoticethefieldnamesfortheaddresspiecesarestoredinContactsContract.CommonDataKinds.StructuredPostal.

InstantMessenger(IM)

Theinstantmessengerqueryperformsjustasthenotesandaddressqueries.ImportantfieldnamesforIMrelateddataarestoredinContactsContract.CommonDataKinds.Im. 

StringimWhere=ContactsContract.Data.CONTACT_ID+"=?

AND"+ContactsContract.Data.MIMETYPE+"=?

";

String[]imWhereParams=newString[]{id,

ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE};

CursorimCur=cr.query(ContactsContract.Data.CONTENT_URI,

null,imWhere,imWhereParams,null);

if(imCur.moveToFirst()){

StringimName=imCur.getString(

imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));

StringimType;

imType=imCur.getString(

imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE));

}

imCur.close();

Organizations

ThelastpartofthecontactrecordtobecoveredistheOrganizationsdata.TheAndroidcontactrecordcancontaininformationaboutEmployment,professional,andsocialmembershipsaswellasrolesandtitles.TheserecordsarequeriedfromtheURIstoredinContactsContract.Data.CONTENT_URI.ImportantfieldnamesfortheorganizationdataarestoredinContactsContract.CommonDataKinds.Organization. 

StringorgWhere=ContactsContract.Data.CONTACT_ID+"=?

AND"+ContactsContract.Data.MIMETYPE+"=?

";

String[]orgWhereParams=newString[]{id,

ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE};

CursororgCur=cr.query(ContactsContract.Data.CONTENT_URI,

null,orgWhere,orgWhereParams,null);

if(orgCur.moveToFirst()){

StringorgName=orgCur.getString(orgCur.getColumn

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1