▼Androidメモ▼
アドレス帳へのアクセス
アドレス帳にアクセスするプログラムを作成する。参考。
リソース
「res/layout」に「listitem.xml」を配置。
listitem.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width ="fill_parent" android:layout_height="fill_parent" android:orientation ="horizontal" android:background="#00FFFFFF"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00FFFFFF"> <ImageView android:layout_width ="wrap_content" android:layout_height="wrap_content" android:minHeight="48dp" android:maxWidth ="48dp" android:maxHeight="48dp" android:minWidth ="48dp" android:tag ="icon"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:background="#00FFFFFF"> <TextView android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:textSize ="24dp" android:textColor ="#000000" android:layout_gravity="center_vertical" android:tag ="text"/> <TextView android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:textSize ="16dp" android:textColor ="#000000" android:layout_gravity="center_vertical" android:tag ="dial"/> </LinearLayout> </LinearLayout> </LinearLayout>
ソースコード
AddressEx.java package net.npaka.addressex; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import android.app.ListActivity; import android.content.ContentResolver; import android.content.ContentUris; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.provider.ContactsContract.Contacts; import android.view.Window; import android.widget.ListAdapter; import android.widget.ListView; //アドレス帳へのアクセス public class AddressEx extends ListActivity { //アプリ生成時に呼ばれる @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); requestWindowFeature(Window.FEATURE_NO_TITLE); //配列リストの生成 Listitems=new ArrayList (); //アドレス情報の取得 ContentResolver cr=getContentResolver(); Cursor c=cr.query(ContactsContract.Contacts.CONTENT_URI, null,null,null,null); while (c.moveToNext()) { //グループ int group=c.getInt(c.getColumnIndex( ContactsContract.Contacts.IN_VISIBLE_GROUP)); if (group!=1) continue; //ID String id=c.getString( c.getColumnIndex(ContactsContract.Contacts._ID)); //表示名 String displayName=c.getString(c.getColumnIndex( ContactsContract.Contacts.DISPLAY_NAME)); //写真 int photoID=c.getInt(c.getColumnIndex( ContactsContract.Contacts.PHOTO_ID)); Bitmap icon=null; if (photoID!=0) { Uri uri=ContentUris.withAppendedId( ContactsContract.Contacts.CONTENT_URI,Long.parseLong(id)); InputStream in=ContactsContract.Contacts.openContactPhotoInputStream(cr,uri); icon=BitmapFactory.decodeStream(in); } //電話 String dial1=""; if (Integer.parseInt(c.getString( c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))>0) { Cursor cp=cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null); while (cp.moveToNext()) { dial1=cp.getString(cp.getColumnIndex( ContactsContract.CommonDataKinds.Phone.DATA1)); } cp.close(); } //メール String mail=""; Cursor cm=cr.query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID+" = ?", new String[]{id},null); while (cm.moveToNext()) { mail=cm.getString(cm.getColumnIndex( ContactsContract.CommonDataKinds.Email.DATA)); } cm.close(); //追加 items.add(new ListArrayItem(icon,displayName,dial1,mail)); } // アダプタの指定 ListAdapter adapter=new ListArrayAdapter( this,R.layout.listitem,items); setListAdapter(adapter); //リストビューの設定 ListView listView=this.getListView(); listView.setBackgroundColor(Color.WHITE); listView.setScrollingCacheEnabled(false); } }
ListArrayAdapter.java package net.npaka.addressex; import java.util.List; import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; //リスト配列アダプタ public class ListArrayAdapter extends ArrayAdapter<ListArrayItem> { private int layoutID; private List<ListArrayItem> items; private LayoutInflater inflater; //コンストラクタ. public ListArrayAdapter(Context context, int layoutID,List<ListArrayItem> items) { super(context,layoutID,items); this.layoutID=layoutID; this.items =items; this.inflater=(LayoutInflater)context.getSystemService( Context.LAYOUT_INFLATER_SERVICE); } //1要素分のビューの取得 @Override public View getView(int position, View convertView,ViewGroup parent) { //ビューの生成 View view; if(convertView!=null){ view=convertView; } else{ view=inflater.inflate(layoutID,null); } //アイテムの取得 ListArrayItem item=items.get(position); //アイコン ImageView imageView=(ImageView)view.findViewWithTag("icon"); imageView.setImageDrawable(new BitmapDrawable(item.icon)); //テキストの指定 TextView textView; textView=(TextView)view.findViewWithTag("text"); textView.setText(item.text); textView=(TextView)view.findViewWithTag("dial"); textView.setText(item.dial); return view; } }
ListArrayItem.java package net.npaka.addressex; import android.graphics.Bitmap; //リスト配列要素 public class ListArrayItem { public Bitmap icon; public String text; public String dial; public String mail; //コンストラクタ public ListArrayItem(Bitmap icon,String text, String dial,String mail){ this.icon=icon; this.text=text; this.dial=dial; this.mail=mail; } }
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest package="net.npaka.addressex" android:versionCode="1" android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".AddressEx" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> </manifest>
アドレスの削除
getContentResolver().delete(ContactsContract.Data.CONTENT_URI,
ContactsContract.Data.RAW_CONTACT_ID+"="+id,null);
getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI,
ContactsContract.RawContacts._ID+"="+id,null);
getContentResolver().delete(ContactsContract.Contacts.CONTENT_URI,
ContactsContract.Contacts._ID+"="+id, null);
−戻る−