Android Contactsの使用(一)

7851 ワード

Android連絡先データベースの使用を学習します.基本的なSQLiteの知識が求められる.詳細については、Android SQLite and Cursor Articleに関する記事を参照してください.Android 1.x 2.0バージョンでグーグルはAndroidの連絡先データベースを変更しました.このマニュアルは主に3つの部分に分かれています.1つは2.0で名刺入れにアクセスすることを紹介することです.二つ目は1.6以前のバージョンを紹介することです.3つ目は、各バージョンに抽象クラスと累積を与えて、名刺記録データを管理することです.
Android Contact API For 2.0
Granting Access権限付与
AndroidManifest.xmlファイルで次の権限を付与

Querying The Android Contact Database連絡先データベースクエリー
基本的な個人情報は名刺入れ表に格納され、詳細は個人表に格納されます.それで...0で該当連絡記録を照会するURIはContactsContractである.Contacts.CONTENT_URI.

package com.test;import android.app.Activity;
import android.database.Cursor;import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
public class TestContacts extends Activity {        
   @Override    public void onCreate(Bundle savedInstanceState){        
         super.onCreate(savedInstanceState);        
         setContentView(R.layout.main);     
           ContentResolver cr = getContentResolver();
         Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);//             
           if(cursor.getCount()>0){            
             while (cursor.moveToNext()) { 
                String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));//   id               
                String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));//                     
                   if(cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))>0)                       {                    //Query phone here.  Covered next                          
                                }            
            }        
           }    
 }
}

アプリケーションを起動するときは、他のAndroidアプリケーションを閉じる必要があります.まず、ContentResolverのインスタンスcrを作成します.ContentResolverのインスタンスを使用してデータベースを問合せ、連絡先リストカーソルを返します.このクエリはContactsContract.Contacts.CONTENT_URIは、格納されたURIを行う.次に、カーソルにレコードが含まれているかどうかを確認し、レコードが含まれている場合は、サイドレコードIDフィールドの値をID変数に格納します.彼はパラメータとして後ろの場所で使用します.名前フィールドの値もname変数に格納します.カーソルの詳細な使い方については、Androidのカーソルチュートリアルを参照してください.
Phone Numbers電話番号
電話番号は独自のテーブルに格納され、個別にクエリーする必要があります.照会する電話番号表はSDKの変数ContactsContractを使用する.CommonDataKinds.Phone.CONTENT_URIが格納するURI.WHERE条件を使用して指定された連絡先の電話番号を取得します.  
//  ID                           
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);                    
    while (pCur.moveToNext()) {                         
               // Do something with  phones                     
     }                      
      pCur.close();

Android連絡先SQLiteデータベースで2番目のクエリーを実行します.問い合わせの電話番号はContactsContract.CommonDataKinds.Phone.CONTENT_URIが格納するURI.CONTACT_IDは電話帳に記憶する、ContactsContract.CommonDataKinds.Phone.CONTACT_IDとwhere句は、返されるデータを制限するために使用されます.
Email Addresses電子メールアドレス
Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,                             ContactsContract.CommonDataKinds.Email.CONTACT_ID + "= ?", new String[]{id}, null);
       while (emailCur.moveToNext()) {                         
//emailアドレスが1つの配列に保存されている場合、複数のメールアドレスString email=が得られます.
emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));                          String emailType = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));                       }                       emailCur.close();
Notes   

String noteWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
                     String[] noteWhereParams = new String[]{id,ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE}; 
                    Cursor noteCur = cr.query(ContactsContract.Data.CONTENT_URI, null, noteWhere, noteWhereParams, null);                     
 if (noteCur.moveToFirst()) {                         
          String note = noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE));                     }            noteCur.close();

Postal Addresses郵便住所

String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
                    String[] addrWhereParams = new String[]{id,ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE};                    
 Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI,null, addrWhere, addrWhereParams, null);  
                   while(addrCur.moveToNext()) {                        
       String poBox = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));                         String street = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));                         String city = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));                         String region = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));                         String postalCode = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));                         String country = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));                         String type = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));                     }                      addrCur.close();

Instant Messenger(IM)インスタントメッセージ

String imWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";    
                  String[] imWhereParams = new String[]{id,ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE};
                      Cursor imCur = cr.query(ContactsContract.Data.CONTENT_URI,null, imWhere, imWhereParams, null);                     
      if (imCur.moveToFirst()) {                         
         String imName = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));                                    String imType = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE));                     }                      imCur.close();

Organizations組織

String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
                     String[] orgWhereParams = new String[]{id,ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE};                      Cursor orgCur = cr.query(ContactsContract.Data.CONTENT_URI,null, orgWhere, orgWhereParams, null);                     
if (orgCur.moveToFirst()) {                          
String orgName = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));                         String title = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE));                     }                      orgCur.close();