Friday 24 April 2015

Fetch Name,Email and Photo from contacts and Send Email on selected

Hello all,

Today I am going to share the code to fetch contact detail(name,email,pic) using Content Provider.

Overview :

To fetch email address ,name and photo,I have made a layout having a listview  named :

fetch_contacts_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#FF00BB" >
    

    <TextView android:layout_width="match_parent"
        android:layout_height="50sp"
        android:background="#FFFFFF"
        android:text="FETCH Contacts"
        android:gravity="center_vertical|center_horizontal"
        android:textColor="#000000"
        android:textSize="18sp"
        android:id="@+id/txt_header_fetchcontactlayout"/>

    <ListView
        android:id="@+id/list_fetchcontactlayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>


->Again we have to design a listview item to show single item of listview .I have named it:
contact_listitem.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="70dp"
              android:layout_gravity="center_horizontal"
              android:orientation="horizontal"
              android:background="#F0F0F0">
<RelativeLayout android:layout_width="match_parent"
    android:layout_height="70dp"
    android:id="@+id/layout_cover">
    <ImageView
            android:id="@+id/icon_contactlistitem"
            android:src="@drawable/ic_launcher"
             android:layout_centerVertical="true"
            android:layout_width="50dp"
            android:layout_height="50dp"
            
            android:layout_marginLeft="10dp" />
    <LinearLayout
            android:orientation="vertical"
            android:layout_gravity="center_vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/icon_contactlistitem"
            android:layout_marginLeft="15dp" >
        <TextView
                android:id="@+id/name_contactlistitem"
                android:text="test"
                android:textColor="#333"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="15sp" />
     
    </LinearLayout>
   </RelativeLayout>

</RelativeLayout>

->Now let's move to the main activity ,I have named it FetchEmailActivity.java

import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.widget.ListView;
import android.widget.TextView;

public class FetchEmailActivity extends Activity{

ListView list;
TextView txt_header;
ProgressDialog dlg;
String image_uri = "";
ArrayList<String> mImg =  null,mEmial,mPhone = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.fetch_contacts_layout);
txt_header = (TextView)findViewById(R.id.txt_header_fetchcontactlayout);
 list = (ListView)findViewById(R.id.list_fetchcontactlayout);
 txt_header.setText("Email");
LoadContacts();

}
private void LoadContacts() {
if (Build.VERSION.SDK_INT >= 11 ) {
  dlg = new ProgressDialog(FetchEmailActivity.this,AlertDialog.THEME_HOLO_LIGHT );
     } else {
        dlg = new ProgressDialog(FetchEmailActivity.this);
       }
       dlg.setMessage("Loading...");
       dlg.show();
mEmial = new ArrayList<String>();
mPhone = new ArrayList<String>();
mImg = new ArrayList<String>();
       ContentResolver cr = FetchEmailActivity.this.getContentResolver();
    
       Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
       if (cur.getCount() > 0) {
           while (cur.moveToNext()) {
               String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
               Cursor cur1 = cr.query( 
                       ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                       ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                               new String[]{id}, null); 
               while (cur1.moveToNext()) { 
                   String name=cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                   Log.e("Name :", name);
                   String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                   Log.e("Email", email);
                   image_uri = cur1
                   .getString(cur1
                     .getColumnIndex(ContactsContract.CommonDataKinds.Email.PHOTO_URI));
                   if(email!=null){
                    mEmial.add(name);
                    mPhone.add(email);
                   }
                   if (image_uri!=null) {
                    if (image_uri.equals("")) {
                    mImg.add("no");
}
                   else
                   {
                    mImg.add(image_uri);
                   }
}
                   else {
                    mImg.add("no");
}
                  
                   
               } 
               cur1.close();
           }
           dlg.dismiss();
          list.setAdapter(null);
           list.setAdapter(new SimpleContactAdapter(FetchEmailActivity.this,mEmial,mPhone,mImg));
       }
       
}


}


->->Here is the design for SimpleContactAdapter.java   The adapter which is used to show the items in listview :

import java.util.ArrayList;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class SimpleContactAdapter extends BaseAdapter{
 
private class ViewHolder {
public RelativeLayout lnCover;
public TextView tvTitle;
public ImageView img_album;

}
private ImageLoader imageLoader  = ImageLoader.getInstance();
DisplayImageOptions options = new DisplayImageOptions.Builder()
 
.showImageOnLoading(R.drawable.loading)
.showImageForEmptyUri(R.drawable.loading)
.showImageOnFail(R.drawable.loading)
.cacheInMemory(true)
.cacheOnDisc(true)
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
.bitmapConfig(Bitmap.Config.ARGB_8888)
.displayer(new FadeInBitmapDisplayer(300))
.build();
private LayoutInflater mLayoutInflater = null;
private Activity activity;
private ViewHolder holder;

ArrayList<String>  Showname,ShowEmail,ShowImg;

public SimpleContactAdapter(Activity activity2,
ArrayList<String> showname,ArrayList<String> email, ArrayList<String> mImg) {
this.activity = activity2;
this.Showname = showname;
this.ShowEmail = email;
this.ShowImg = mImg;
mLayoutInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader.init(ImageLoaderConfiguration.createDefault(activity));
    
}

@Override
public int getCount() {
return Showname.size();
}

@Override
public Object getItem(int position) {
return Showname.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.contact_listitem, null);

holder = new ViewHolder();
holder.lnCover = (RelativeLayout)convertView.findViewById(R.id.layout_cover);
holder.tvTitle= (TextView) convertView.findViewById(R.id.name_contactlistitem);
holder.img_album = (ImageView)convertView.findViewById(R.id.icon_contactlistitem);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvTitle.setText("Name: "+Showname.get(position)+" \n Email: "+ShowEmail.get(position));

if (ShowImg.get(position).equals("no")) {
holder.img_album.setImageResource(android.R.drawable.picture_frame);
}
else {
imageLoader.displayImage(ShowImg.get(position),holder.img_album, options);

}
          holder.lnCover.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setType("text/html");
            intent.putExtra(Intent.EXTRA_EMAIL, ShowEmail.get(position));
            intent.putExtra(Intent.EXTRA_SUBJECT, "Hood Scanner Application");
            activity.startActivity(Intent.createChooser(intent, "Send Email"));
}
});
return convertView;
}

}



->Here I have used  Android-Universal-Image-Loader to load the image ,you can replace it with another Image Loader.

->next step will be  add user-permission in Menifest file :

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

->That's all I have attached the screen shot below of this demo:





Fetch Name,Phone Number and Photo from contacts,and send SMS on selected number

Hello all,

Today I am going to share the code to fetch contact details(Name,phone,pic) using Content Provider.

Overview :

To fetch phone num,name and photo ,I have made a layout having a listview  named :

fetch_contacts_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#FF00BB" >
    

    <TextView android:layout_width="match_parent"
        android:layout_height="50sp"
        android:background="#FFFFFF"
        android:text="FETCH Contacts"
        android:gravity="center_vertical|center_horizontal"
        android:textColor="#000000"
        android:textSize="18sp"
        android:id="@+id/txt_header_fetchcontactlayout"/>

    <ListView
        android:id="@+id/list_fetchcontactlayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>


</LinearLayout>


->Again we have to design a listview item to show single item of listview .I have named it:
contact_listitem.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="70dp"
              android:layout_gravity="center_horizontal"
              android:orientation="horizontal"
              android:background="#F0F0F0">
<RelativeLayout android:layout_width="match_parent"
    android:layout_height="70dp"
    android:id="@+id/layout_cover">
    <ImageView
            android:id="@+id/icon_contactlistitem"
            android:src="@drawable/ic_launcher"
             android:layout_centerVertical="true"
            android:layout_width="50dp"
            android:layout_height="50dp"
            
            android:layout_marginLeft="10dp" />
    <LinearLayout
            android:orientation="vertical"
            android:layout_gravity="center_vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/icon_contactlistitem"
            android:layout_marginLeft="15dp" >
        <TextView
                android:id="@+id/name_contactlistitem"
                android:text="test"
                android:textColor="#333"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="15sp" />
     
    </LinearLayout>
   </RelativeLayout>

</RelativeLayout>

->Now let's Move to the Activity: My activity name is : FetchPhoneNumActivity.java

import java.io.IOException;    
import java.io.InputStream;    
import java.util.ArrayList;    
import android.app.Activity;     
import android.content.ContentResolver;    
import android.content.ContentUris; 
import android.database.Cursor;    
import android.graphics.Bitmap;    
import android.graphics.BitmapFactory;
import android.os.Bundle;    
import android.provider.ContactsContract;
import android.widget.ListView;    
import android.widget.TextView;    

public class FetchPhoneNumActivity extends Activity {

  
 ArrayList<String> mName,mPhone;    
 ArrayList<Bitmap> mImg;  
 ListView list;
TextView txt_header;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.fetch_contacts_layout);    
        txt_header = (TextView)findViewById(R.id.txt_header_fetchcontactlayout);
        list = (ListView)findViewById(R.id.list_fetchcontactlayout);
        txt_header.setText("Phone Number");
        readContacts();    
    }

  
    public void readContacts() { 
      
    mName =  new ArrayList<String>();
    mPhone =  new ArrayList<String>();
    mImg = new ArrayList<Bitmap>();
    ContentResolver cr = getContentResolver();    
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    String phone = null;   
      
    String image_uri = "";    
   
    if (cur.getCount() > 0) 
    {
    while (cur.moveToNext())
   
    String id = cur.getString(cur .getColumnIndex(ContactsContract.Contacts._ID)); 
    long _id = cur.getLong(cur .getColumnIndex(ContactsContract.Contacts._ID)); 
    String name = cur .getString(cur .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
    image_uri = cur .getString(cur .getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI)); 
   
    if (Integer .parseInt(cur.getString(cur .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
   
    {  
    mName.add(name);
    Cursor pCur = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
    new String[] { id }, null);  
   
    while (pCur.moveToNext())
    {
    phone = pCur .getString(pCur .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
                     mPhone.add(phone);
    System.out.println("phone" + phone);  
    }
    pCur.close(); 
   
    Bitmap photo = null;
     try {
                   InputStream inputStream = ContactsContract.Contacts.
                    openContactPhotoInputStream(getContentResolver(),
                           ContentUris.withAppendedId(ContactsContract.
                            Contacts.CONTENT_URI, Long.valueOf(id)));

                   if (inputStream != null) {
                       photo = BitmapFactory.decodeStream(inputStream);
                       mImg.add(photo);
                   }
                   else
      {
                    mImg.add(null);
                   }
    if (inputStream != null) inputStream.close();

               } catch (IOException e) {
                   e.printStackTrace();
               }
                   } 

   
    list.setAdapter(new ContactsPhoneAdapter(FetchPhoneNumActivity.this,mName,mPhone,mImg));
    }
   
  
   

}

->Here is the design for ContactsPhoneAdapter.java   The adapter which is used to show the items in listview :

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class ContactsPhoneAdapter extends BaseAdapter{


 
private class ViewHolder {
public RelativeLayout lnCover;
public TextView tvName;
public TextView tvTitle,txt_before;
public ImageView img_album;
public Button btn_after;

}

private LayoutInflater mLayoutInflater = null;
private Activity activity;
private ViewHolder holder;
private String name,cat_id,str_flag="";

ArrayList<String>  Showname,ShowEmail;
ArrayList<Bitmap> ShowImg;

public ContactsPhoneAdapter(Activity activity2,
ArrayList<String> showname,ArrayList<String> email, ArrayList<Bitmap> mImg) {
this.activity = activity2;
this.Showname = showname;
this.ShowEmail = email;
this.ShowImg = mImg;
mLayoutInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  
}

@Override
public int getCount() {
return Showname.size();
}

@Override
public Object getItem(int position) {
return Showname.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.contact_listitem, null);

holder = new ViewHolder();
holder.lnCover = (RelativeLayout)convertView.findViewById(R.id.layout_cover);
holder.tvTitle= (TextView) convertView.findViewById(R.id.name_contactlistitem);
holder.img_album = (ImageView)convertView.findViewById(R.id.icon_contactlistitem);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}


holder.tvTitle.setText("Name:"+Showname.get(position)+"\n  Phone:"+ShowEmail.get(position));



if (ShowImg.get(position)==null) {
holder.img_album.setImageResource(android.R.drawable.picture_frame);
}
else {
holder.img_album.setImageBitmap(ShowImg.get(position));
}

holder.lnCover.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
Uri uri = Uri.parse("smsto:" + ShowEmail.get(position));
   Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
   intent.putExtra("sms_body", "");  
   activity.startActivity(intent);
}
});
     
return convertView;
}

}


->Next step will be  add user-permission in Menifest file :

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

->That's all I have attached the screen shot below of this demo


Fetch Name,Phone Number and Photo from contacts




Advanced Kotlin Coroutines : Introduction

 Hi,  Today I am unwraping the topic in Kotin world i.e. Coroutine . If you want to get started with Kotlin coroutine and ease your daily de...