Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone



Clound SSD Virtual Server

Android People Contact List, Name, Phone No, Photo Picture, Email and Address

Android People Contact List, Name, Phone No, Photo Picture, Email and Address ถ้าได้เคยใช้ App พวก LINE หรือ What App ที่มีมากับ iPhone หรือ Android จะเห็นว่า Application เหล่านี้จะสามารถดึงรายชื่อ Contact List ที่อยู่ในหลายเลขโทรศัพท์ของเรามาแสดงใน App ของตัวเอง และเราจะเห็นว่าข้อมูลเหล่านี้ OS เองก็ไม่ได้ห่วงหรือห้าม App อื่น ๆ เรียกใช้ และการเรียกใช้งานก็ไม่ได้ยากซับซ้อนอะไรมากมาย แต่ทั้งนี้ขึ้นอยู่กับว่าจะต้องการดึงข้อมูลอะไรออกมาบ้าง เช่น ต้องการ ชื่อ (DISPLAY_NAME), หมายเลขโทรศัพท์(Phone) , รูปภาพที่อยู่ใน Contact (Photo) หรือข้อมูลอื่น ๆ

Android People Contact List

Android People Contact List


จากภาพจะเห็นว่าเราสามารถเขียน Android เพื่อดึงข้อมูลจาก People Contact List ได้ทั้งที่เป็น ชื่อ(DISPLAY_NAME), หมายเลขโทรศัพท์(Phone) และ รูปภาพ(Photo)

หน้าจอ Contact People บน Android

Android People Contact List

เข้าได้จาก Icons ว่า People

Android People Contact List

เป็นรายชื่อ Contact ที่อยู่ใน Smartphone

Android People Contact List

รายละเอียดของ Contact ในตัวอย่างจะเห็นว่าภายใน 1 Contact จะสามารถมีข้อมูลได้หลายรายการ เช่น หมายเลขโทรศัพท์หลายเบอร์ หรือ อีเมล์หลายตัว

ในการเขียนโปรแกรมเพื่อดึง Contact List ที่อยู่ใน Smartphone นั้นจะต้องกำหนด Permission ที่ไฟล์ AndroidManifest.xml ด้วย

สำหรับขั้นตอนในการดึง Contact List ถ้าเป็นแค่ชื่อที่เป็น DISPLAY_NAME จะสามารถทำได้ง่ายเพียงใช้ Cursor ทำการ Query มาจาก ContactsContract.Contacts ก็จะได้ข้อมูลที่อยู่ในรูปแบบของ Cursor และนำไปใช้ได้ในทันที

    	Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        startManagingCursor(cursor);

แต่ถ้าต้องการดึงข้อมูลอื่น ๆ ด้วย เช่น Phone No , Address หรือ Email ซึ่งข้อมูลเหล่านี้ภายใน 1 Contact จะสามารถมีได้หลายรายการ เฉพาะฉะนั้นเมื่อ Loop ข้อมุลในแต่ล่ะ Cursor ก็จะต้องมีการ Loop ข้อมูลของ Phone No ด้วยว่าในแต่ล่ะ Contact มีข้อมูลนั้น ๆ กี่รายการ









และกรณีที่ดึง Photo Contact ก็จะต้องอ่านข้อมูล Photo Contact ที่อยู่ในรุปแบบ Bitmap ก่อนนำมาแสดงผลบน ImageView ด้วย

ในตัวอย่างทั้ง 3 ตัวนี้ ถือได้ว่าเป็นการเลือกข้อมูลที่ค่อนข้างครอบคลุมกับความต้องการใช้งาน ซึ่งยอมรับว่ากว่าจะทำบทความนี้ออกมาได้ก็ใช้เวลาไม่ตำกว่า 5-6 ชม. เพราะข้อมูลบางรายตัวค้นหายาก จะต้องอาสัยการศึกษาจาก Sample Project ที่มากับ Android SDK

<uses-permission android:name="android.permission.READ_CONTACTS" />

การกำหนด Permission สำหรับการอ่าน Contact

Android People Contact List

รูปการเพิ่ม Permission บน AndroidManifest.xml


Example 1 การดึงข้อมูลจาก Contact List มาแสดงแบบง่าย ๆ โดยแสดง ID , Name และ Tel

โครงสร้างของไฟล์ประกอบด้วย 2 ไฟล์คือ MainActivity.java, activity_main.xml และ activity_column.xml

Android People Contact List

activity_main.xml
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
 
   	<TableRow
      android:id="@+id/tableRow1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" >
     
     <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Contact List : "
        android:layout_span="1"
        android:textAppearance="?android:attr/textAppearanceLarge" />
  	        
 	</TableRow>

	<View
		android:layout_height="1dip"
		android:background="#CCCCCC" />
 
  <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.1">   
     
     <ListView
         android:id="@+id/listView1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
     </ListView>
  	        
 	</LinearLayout>

	<View
		android:layout_height="1dip"
		android:background="#CCCCCC" />
   		  
   	<LinearLayout
      android:id="@+id/LinearLayout1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:padding="5dip" >

   		<TextView
   		    android:id="@+id/textView2"
   		    android:layout_width="wrap_content"
   		    android:layout_height="wrap_content"
   		    android:text="By.. ThaiCreate.Com" />

	</LinearLayout>
	
</TableLayout>

ไฟล์ XML Layout ของ Activity หลัก


Android People Contact List

activity_column.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/linearLayout1" 
	android:layout_width="fill_parent"
	android:layout_height="fill_parent" >

	<TextView
	android:id="@+id/ColID" 
		android:layout_width="0dp"
		android:layout_height="wrap_content" 
		android:layout_weight="1"
		android:text="ID"/>

	<TextView
		android:id="@+id/ColName" 
		android:layout_width="0dp"
		android:layout_height="wrap_content" 
		android:layout_weight="1"
		android:text="Name"/>

	<TextView
	    android:id="@+id/ColPhoneNo"
	    android:layout_width="0dp"
	    android:layout_height="wrap_content"
	    android:layout_weight="1"
	    android:text="Tel" />

</LinearLayout>

XML Layout ของ Custom Layout ของ ListView

MainActivity.java
package com.myapp;

import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;

public class MainActivity extends Activity {
	  
    String arrData[][];
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    	Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        startManagingCursor(cursor);
           
	if(cursor != null)
	{
		if (cursor.moveToFirst()) {
			arrData = new String[cursor.getCount()][cursor.getColumnCount()];
			/***
			 *  [x][0] = ID
			 *  [x][1] = Name
			 *  [x][2] = PhoneNo
			 */
			
			int i= 0;
			do { // Start Loop all contact		
				String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
				
				// ID
				arrData[i][0] = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
				
				// Display Name
				arrData[i][1] = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
				
				// Phone No
				if (Integer.parseInt(cursor.getString( cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { // Count of Number
				Cursor pCur = getContentResolver().query(
					    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
					    null, 
					    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
					    new String[]{id}, null);
						// Loop for Phone No
					while (pCur.moveToNext()) {
						String PhoneNo = pCur.getString( pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA));
						if(arrData[i][2] != null)
						{
							arrData[i][2] = arrData[i][2] + ", " + PhoneNo;
						}
						else
						{
							arrData[i][2] = PhoneNo;
						}
					} 
					pCur.close();
				
				}
				
				i++;
			} while (cursor.moveToNext());						

		}
	}
	cursor.close();
	 	
        final ListView lView1 = (ListView)findViewById(R.id.listView1); 
        lView1.setAdapter(new ImageAdapter(this,arrData));
        
        // OnClick
        lView1.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v,
				int position, long id) {
				
				   Toast.makeText(getApplicationContext(),
					"Your selected : " + arrData[position][1].toString(), Toast.LENGTH_SHORT).show();
		    	
			}
		});
      
    }

    public class ImageAdapter extends BaseAdapter 
    {
        private Context context;
        private String[][] lis;
        
        public ImageAdapter(Context c, String[][] li) 
        {
        	// TODO Auto-generated method stub
            context = c;
            lis = li;
        }
 
        public int getCount() {
        	// TODO Auto-generated method stub
            return lis.length;
        }
 
        public Object getItem(int position) {
        	// TODO Auto-generated method stub
            return position;
        }
 
        public long getItemId(int position) {
        	// TODO Auto-generated method stub
            return position;
        }
 
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			
			LayoutInflater inflater = (LayoutInflater) context
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		 
			if (convertView == null) {
				convertView = inflater.inflate(R.layout.activity_column, null); 
			}


			// ColID
			TextView txtID = (TextView) convertView.findViewById(R.id.ColID);
			txtID.setPadding(0, 0, 0, 0);
			txtID.setText(lis[position][0].toString());

			// ColName
			TextView txtName = (TextView) convertView.findViewById(R.id.ColName);
			txtName.setPadding(0, 0, 0, 0);
			txtName.setText(lis[position][1].toString());
			
			// ColPhoneNo
			TextView txtPhoneNo = (TextView) convertView.findViewById(R.id.ColPhoneNo);
			txtPhoneNo.setText(lis[position][2].toString());
 
			return convertView;

		}
    } 
    
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}


Screenshot

Android People Contact List

แสดงข้อมูล Contact List โดยมี Display Name และหมายหลขโทรศัพท์








Example 2 การดึง Photo Contact จาก Contact List มาแสดงใน ListView และใช้ ArrayList และ HashMap เข้ามาจัดเก็บข้อมูลเพราะสามารถจัดเก็บได้ทั้งข้อความและ Bitmap ของ Photo Contact

โครงสร้างของไฟล์ประกอบด้วย 2 ไฟล์คือ MainActivity.java, activity_main.xml และ activity_column.xml

Android People Contact List

activity_main.xml
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
 
   	<TableRow
      android:id="@+id/tableRow1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" >
     
     <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Contact List : "
        android:layout_span="1"
        android:textAppearance="?android:attr/textAppearanceLarge" />
  	        
 	</TableRow>

	<View
		android:layout_height="1dip"
		android:background="#CCCCCC" />
 
  <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.1">   
     
     <ListView
         android:id="@+id/listView1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
     </ListView>
  	        
 	</LinearLayout>

	<View
		android:layout_height="1dip"
		android:background="#CCCCCC" />
   		  
   	<LinearLayout
      android:id="@+id/LinearLayout1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:padding="5dip" >

   		<TextView
   		    android:id="@+id/textView2"
   		    android:layout_width="wrap_content"
   		    android:layout_height="wrap_content"
   		    android:text="By.. ThaiCreate.Com" />

	</LinearLayout>
	
</TableLayout>

ไฟล์ XML Layout ของ Activity หลัก


Android People Contact List

activity_column.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView
        android:id="@+id/ColPhoto"
        android:layout_width="60dp"
        android:layout_height="60dp"
    />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Name: "
            />
            <TextView android:id="@+id/ColName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
            />
        </LinearLayout>
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="No: "
            />
            <TextView android:id="@+id/ColPhoneNo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
            />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

ไฟล์ Custom Layout ของ ListView

MainActivity.java
package com.myapp;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;

import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class MainActivity extends Activity {
	  
    ArrayList<HashMap<String, Object>> MyArrList;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    	Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        startManagingCursor(cursor);
        
        MyArrList = new ArrayList<HashMap<String, Object>>();
        HashMap<String, Object> map;
           
	 	if(cursor != null)
	 	{
			if (cursor.moveToFirst()) {
				
				
				map = new HashMap<String, Object>();
				/***
				 *  ID
				 *  NAME
				 *  PHONENO
				 *  PHOTO
				 */
				
				do { // Start Loop all contact		
					String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
					
					map = new HashMap<String, Object>();
					
					// ID
					map.put("ID", (String)cursor.getString( cursor.getColumnIndex(ContactsContract.Contacts._ID)));
					
					// Display Name
					map.put("NAME", (String)cursor.getString( cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
					
					// Phone No
					String tmpPhoneNo = "";
					if (Integer.parseInt(cursor.getString(cursor.getColumnIndex( ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { // Count of Number
						Cursor pCur = getContentResolver().query(
					 		    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
					 		    null, 
					 		    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
					 		    new String[]{id}, null);
								// Loop for Phone No
					 	        while (pCur.moveToNext()) {
					 	        	String PhoneNo = pCur.getString(pCur.getColumnIndex( ContactsContract.CommonDataKinds.Phone.DATA));
					 	        	if(tmpPhoneNo != null)
					 	        	{
					 	        		tmpPhoneNo = tmpPhoneNo + ", " + PhoneNo;
					 	        	}
					 	        	else
					 	        	{
					 	        		tmpPhoneNo = PhoneNo;
					 	        	}
					 	        } 
					 	        pCur.close();
						
					}
					
					// PhoneNo
					map.put("PHONENO", (String)tmpPhoneNo);
					
					// Photo Bitmap
					Bitmap tmpPhoto = null;
					final ContentResolver resolver = getContentResolver();
					Cursor sCur = resolver.query(
				 		    ContactsContract.Data.CONTENT_URI, 
				 		    null, 
		                    ContactsContract.Data.CONTACT_ID + "=" + id + " AND "
		                            + ContactsContract.Data.MIMETYPE + "='"
		                            + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null,
		                    null);
					if (sCur == null) {
						tmpPhoto = null;
					}
					else
					{
						Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long
				                .parseLong(id)); 
						InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);
						 if (input == null) {  
							 tmpPhoto = null;
						 }
						 else
						 {
							 tmpPhoto= BitmapFactory.decodeStream(input);
						 }
	 
					}
					sCur.close();
					map.put("PHOTO", (Bitmap)tmpPhoto);
					
					// Add to ArrayList
					MyArrList.add(map);
	        
				} while (cursor.moveToNext());						

			}
	 	}
	 	cursor.close();
	 	
        final ListView lView1 = (ListView)findViewById(R.id.listView1); 
        lView1.setAdapter(new ImageAdapter(this));
        
        // OnClick
        lView1.setOnItemClickListener(new OnItemClickListener() {
		public void onItemClick(AdapterView<?> parent, View v,
			int position, long id) {
			
			   Toast.makeText(getApplicationContext(),
			    "Your selected : " + MyArrList.get(position).get("ID"), Toast.LENGTH_SHORT).show();
		
				//*** for ACTION_CALL
			   /*
			    * 
			Intent intent = new Intent(Intent.ACTION_CALL);
			long phoneId =  Integer.parseInt(MyArrList.get(position).get("ID"));
			intent.setData(ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,  phoneId));
			startActivity(intent);
			 */
		
		}
	});
      
    }

    public class ImageAdapter extends BaseAdapter 
    {
        private Context context;
        
        public ImageAdapter(Context c) 
        {
        	// TODO Auto-generated method stub
            context = c;
        }
 
        public int getCount() {
        	// TODO Auto-generated method stub
            return MyArrList.size();
        }
 
        public Object getItem(int position) {
        	// TODO Auto-generated method stub
            return position;
        }
 
        public long getItemId(int position) {
        	// TODO Auto-generated method stub
            return position;
        }
 
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		
		LayoutInflater inflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	 
		if (convertView == null) {
			convertView = inflater.inflate(R.layout.activity_column, null); 
		}
	 
				
		// ColPhoto	
		ImageView imgPhoto = (ImageView) convertView.findViewById(R.id.ColPhoto);
		imgPhoto.setPadding(5, 5, 5, 5);
		Bitmap bm = (Bitmap)MyArrList.get(position).get("PHOTO");
		if (bm != null) {
			imgPhoto.setImageBitmap(bm);
		} else {
			imgPhoto.setImageResource(android.R.drawable.sym_def_app_icon); // No Photo (Default)
		}

		// ColName
		TextView txtName = (TextView) convertView.findViewById(R.id.ColName);
		txtName.setPadding(10, 0, 0, 0);
		txtName.setText(MyArrList.get(position).get("NAME").toString());
		
		// ColPhoneNo
		TextView txtPhoneNo = (TextView) convertView.findViewById(R.id.ColPhoneNo);
		txtPhoneNo.setText(MyArrList.get(position).get("PHONENO").toString());

		return convertView;

	}
    } 
    
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}


แสดง Contact List ซึ่งจะดึง Photo Contact มาแสดงใน ListView ด้วย

Screenshot

Android People Contact List




Example 2.1 แสดงรายละเอียดอื่น ๆ เมื่อคลิกที่ Contact แต่ล่ะคนใน ListView

Android People Contact List

ใน Contact ของ Android จะสังเกตุว่าจะมีข้อมูลอื่น ๆ ที่สามารถจัดเก็บได้ด้วย เช่น Email , Address ซึ่งข้อมูลเหล่านี้สามารถมีได้หลายรายการ

MainActivity.java
				   Intent newActivity = new Intent(MainActivity.this,DetailActivity.class);
				   newActivity.putExtra("PhoneID", MyArrList.get(position).get("ID"));
				   startActivity(newActivity);

ใน Event ของ lView1.setOnItemClickListener() ให้แก้ไขเป็นการ Intent มายัง DetailActivity.class

เพิ่มไฟล์ activity_detail.xml และ DetailActivity.java

Android People Contact List

activity_detail.xml
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
 
   	<TableRow
      android:id="@+id/tableRow1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" >
     
     <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Contact Detail : "
        android:layout_span="1"
        android:textAppearance="?android:attr/textAppearanceLarge" />

     <Button
         android:id="@+id/btnBack"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Back" />
  	        
 	</TableRow>

	<View
		android:layout_height="1dip"
		android:background="#CCCCCC" />
 
  <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.1">   
     
				<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
				    android:orientation="horizontal"
				    android:layout_width="fill_parent"
				    android:layout_height="fill_parent">
				    <ImageView
				        android:id="@+id/ColPhoto"
				        android:layout_width="80dp"
				        android:layout_height="80dp"
				    />
				    <LinearLayout
				        android:orientation="vertical"
				        android:layout_width="fill_parent"
				        android:layout_height="fill_parent">
				        <LinearLayout
				            android:orientation="horizontal"
				            android:layout_width="wrap_content"
				            android:layout_height="wrap_content">
				            <TextView
				                android:layout_width="wrap_content"
				                android:layout_height="wrap_content"
				                android:text="Name: "
				            />
				            <TextView android:id="@+id/ColName"
				                android:layout_width="wrap_content"
				                android:layout_height="wrap_content"
				            />
				        </LinearLayout>
				        <LinearLayout
				            android:orientation="horizontal"
				            android:layout_width="wrap_content"
				            android:layout_height="wrap_content">
				            <TextView
				                android:layout_width="wrap_content"
				                android:layout_height="wrap_content"
				                android:text="No: "
				            />
				            <TextView android:id="@+id/ColPhoneNo"
				                android:layout_width="wrap_content"
				                android:layout_height="wrap_content"
				            />
				        </LinearLayout>
				        <LinearLayout
				            android:orientation="horizontal"
				            android:layout_width="wrap_content"
				            android:layout_height="wrap_content">
				            <TextView
				                android:layout_width="wrap_content"
				                android:layout_height="wrap_content"
				                android:text="Email: "
				            />
				            <TextView android:id="@+id/ColEmail"
				                android:layout_width="wrap_content"
				                android:layout_height="wrap_content"
				            />
				        </LinearLayout>
				        <LinearLayout
				            android:orientation="horizontal"
				            android:layout_width="wrap_content"
				            android:layout_height="wrap_content">
				            <TextView
				                android:layout_width="wrap_content"
				                android:layout_height="wrap_content"
				                android:text="Address: "
				            />
				            <TextView android:id="@+id/ColAddress"
				                android:layout_width="wrap_content"
				                android:layout_height="wrap_content"
				            />
				        </LinearLayout>
				    </LinearLayout>
				</LinearLayout>

  	        
 	</LinearLayout>

	<View
		android:layout_height="1dip"
		android:background="#CCCCCC" />
   		  
   	<LinearLayout
      android:id="@+id/LinearLayout1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:padding="5dip" >

   		<TextView
   		    android:id="@+id/textView2"
   		    android:layout_width="wrap_content"
   		    android:layout_height="wrap_content"
   		    android:text="By.. ThaiCreate.Com" />

	</LinearLayout>
	
</TableLayout>


DetailActivity.java
package com.myapp;

import java.io.InputStream;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class DetailActivity extends Activity  {
	
	 @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_detail);
	        
	        //******** Show Detail **********//
        
	        Intent intent= getIntent();
	        final long PhoneID = Integer.parseInt(intent.getStringExtra("PhoneID")); 
	  
	        // Photo Bitmap
	        ImageView imgPhoto = (ImageView) findViewById(R.id.ColPhoto);
	        imgPhoto.setPadding(10, 10, 10, 10);
			final ContentResolver resolver = getContentResolver();
			Cursor sCur = resolver.query(
		 		    ContactsContract.Data.CONTENT_URI, 
		 		    null, 
                    ContactsContract.Data.CONTACT_ID + "=" + PhoneID + " AND "
                            + ContactsContract.Data.MIMETYPE + "='"
                            + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null,
                    null);
			if (sCur == null) {
				imgPhoto.setImageResource(android.R.drawable.sym_def_app_icon); 
			}
			else
			{
				Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, PhoneID); 
				InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);
				 if (input == null) {  
					 imgPhoto.setImageResource(android.R.drawable.sym_def_app_icon); 
				 }
				 else
				 {
					 imgPhoto.setImageBitmap(BitmapFactory.decodeStream(input));
				 }

			}
			sCur.close();
			
			/*** Get Contact Name by ID ***/
			Cursor cursor = getContentResolver().query(
		 		    ContactsContract.Contacts.CONTENT_URI, 
		 		    null, 
		 		    ContactsContract.Contacts._ID +" = ?", 
		 		    new String[]{String.valueOf(PhoneID)}, null);
			
			startManagingCursor(cursor);
			
			if(cursor != null)
			{
				cursor.moveToFirst();
				// Name
				TextView txtName = (TextView) findViewById(R.id.ColName);
				txtName.setText(cursor.getString( cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
				
				// Phone No
				Cursor pCur = getContentResolver().query(
			 		    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
			 		    null, 
			 		    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
			 		    new String[]{String.valueOf(PhoneID)}, null);
						// Loop for Phone No
						String pNo = null;
			 	        while (pCur.moveToNext()) {
			 	        	String PhoneNo = pCur.getString( pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA));
			 	        	String PhoneType = pCur.getString( pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
			 	        	if(pNo != null)
			 	        	{
			 	        		pNo = pNo + ", " + "(" + fPhoneType(PhoneType) + ")"+ PhoneNo;;
			 	        	}
			 	        	else
			 	        	{
			 	        		pNo = "(" + fPhoneType(PhoneType) + ")"+ PhoneNo;
			 	        	}
			 	        } 
			 	        pCur.close();
				// Phone No
				TextView txtPhone = (TextView) findViewById(R.id.ColPhoneNo);  
				txtPhone.setText(pNo);
				
				
				// Email
				Cursor eCur = getContentResolver().query(
			 		    ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
			 		    null, 
			 		    ContactsContract.CommonDataKinds.Email.CONTACT_ID +" = ?", 
			 		    new String[]{String.valueOf(PhoneID)}, null);
						// Loop for Email
						String eNo = null;
			 	        while (eCur.moveToNext()) {
			 	        	String EmailNo = eCur.getString( eCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
			 	        	String EmailType = eCur.getString( eCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
			 	        	if(eNo != null)
			 	        	{
			 	        		eNo = eNo + ", " + "(" + fEmailType(EmailType) + ")"+ EmailNo;;
			 	        	}
			 	        	else
			 	        	{
			 	        		eNo = "(" + fEmailType(EmailType) + ")"+ EmailNo;
			 	        	}
			 	        } 
			 	       eCur.close();
				// Email
				TextView txtEmail = (TextView) findViewById(R.id.ColEmail);  
				txtEmail.setText(eNo);
				
				
				// Address
				String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
				String[] addrWhereParams = new String[]{String.valueOf(PhoneID), 
					ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE}; 
				Cursor addrCur = getContentResolver().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 state = 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));
					
			 		TextView txtAddress = (TextView) findViewById(R.id.ColAddress);  
					txtAddress.setText(txtAddress.getText() + "- " + street);
				} 
			 	addrCur.close();
				
			}
			cursor.close();
	        
	        
	        
	        // btnBack
	        final Button Back = (Button)findViewById(R.id.btnBack); 
	        Back.setOnClickListener(new View.OnClickListener() {
				public void onClick(View arg0) {
					// TODO Auto-generated method stub
					   Intent newActivity = new Intent(DetailActivity.this,MainActivity.class);
					   startActivity(newActivity);
				}
			});
	        
	        
	      
	    }
	 
     public String fPhoneType(String TypeID)
     {
	        if ("1".equals(TypeID)) {
	        	return "Home";
	        } else if ("2".equals(TypeID)) {
	        	return "Mobile";	
	        }
		return TypeID;
     }
     
     public String fEmailType(String TypeID)
     {
	        if ("1".equals(TypeID)) {
	        	return "Home";
	        } else if ("2".equals(TypeID)) {
	        	return "Work";	
	        }
		return TypeID;
     }

}


เพิ่ม DetailActivity ลงใน AndroidManifest.xml
        <activity 
            android:name="DetailActivity"
            android:theme="@style/AppTheme"
            android:screenOrientation="portrait"            
            android:label="@string/title_activity_main" />

เพิ่มลงในไฟล์ AndroidManifest.xml ด้วย



Screenshot

Android People Contact List

แสดงรายชื่อ Contact List บน ListView

Android People Contact List

แสดงรายละเอียดของ Contact เมื่อคลิกในแต่ล่ะรายการของ ListView

   
Share


ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท


ลองใช้ค้นหาข้อมูล


   


Bookmark.   
       
  By : ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ)
  Score Rating :  
  Create/Update Date : 2012-07-28 20:20:12 / 2017-03-26 22:20:47
  Download : No files
 Sponsored Links / Related

 
Android Custom Adapter
Rating :

 
Android Rating (Vote) and ListView Part 1
Rating :

 
Android Rating (Vote) and ListView Part 2 (Member Login and Average Rating)
Rating :

 
Android PhoneGap (jQuery Mobile) Create Convert App from Website(URL)
Rating :

 
Android Capture Image and Camera Capture Screenshot (android.view.SurfaceView)
Rating :

 
Android Pull Down to Refresh And Release to Refresh or Update (Part 1)
Rating :

 
Android Pull Down to Refresh And Release to Update (Part 2 , PHP & MySQL)
Rating :


ThaiCreate.Com Forum


Comunity Forum Free Web Script
Jobs Freelance Free Uploads
Free Web Hosting Free Tools

สอน PHP ผ่าน Youtube ฟรี
สอน Android การเขียนโปรแกรม Android
สอน Windows Phone การเขียนโปรแกรม Windows Phone 7 และ 8
สอน iOS การเขียนโปรแกรม iPhone, iPad
สอน Java การเขียนโปรแกรม ภาษา Java
สอน Java GUI การเขียนโปรแกรม ภาษา Java GUI
สอน JSP การเขียนโปรแกรม ภาษา Java
สอน jQuery การเขียนโปรแกรม ภาษา jQuery
สอน .Net การเขียนโปรแกรม ภาษา .Net
Free Tutorial
สอน Google Maps Api
สอน Windows Service
สอน Entity Framework
สอน Android
สอน Java เขียน Java
Java GUI Swing
สอน JSP (Web App)
iOS (iPhone,iPad)
Windows Phone
Windows Azure
Windows Store
Laravel Framework
Yii PHP Framework
สอน jQuery
สอน jQuery กับ Ajax
สอน PHP OOP (Vdo)
Ajax Tutorials
SQL Tutorials
สอน SQL (Part 2)
JavaScript Tutorial
Javascript Tips
VBScript Tutorial
VBScript Validation
Microsoft Access
MySQL Tutorials
-- Stored Procedure
MariaDB Database
SQL Server Tutorial
SQL Server 2005
SQL Server 2008
SQL Server 2012
-- Stored Procedure
Oracle Database
-- Stored Procedure
SVN (Subversion)
แนวทางการทำ SEO
ปรับแต่งเว็บให้โหลดเร็ว


Hit Link
   







Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่