Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android how to send multiple contacts are attached in single .vcf file and send to mail?

In my application, a number of contacts are attached to single .vcf file and that file sent to mail, try to this one all contacts data display in log cat, but unable to send all data attached to single .vcf file?

Anyone have an idea regarding this help me, please.

here is my code

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);  

    vCard = new ArrayList<String>();                 

    Log.i("TAG one", "vfile" +vfile);
    vfile = "Contacts" + "_" + System.currentTimeMillis() + ".vcf";  

    /**
     * This Function For Vcard And here i take one Array List in Which i
     * store every Vcard String of Every Contact Here i take one Cursor and
     * this cursor is not null and its count>0 than i repeat one loop up to
     * cursor.getcount() means Up to number of phone contacts. And in Every
     * Loop i can make vcard string and store in Array list which i declared
     * as a Global. And in Every Loop i move cursor next and print log in
     * logcat.
     * */
    getVcardString();           
}       

private void getVcardString() { 

    cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
    Log.i("TAG two", "cursor" +cursor);
    if (cursor != null && cursor.getCount() > 0) {
        cursor.moveToFirst();
        Log.i("Number of contacts", "cursorCount" +cursor.getCount());          

        for (int i = 0; i < cursor.getCount(); i++) {                       
            get(cursor);                    
            Log.i("TAG send contacts",  "Contact " + (i + 1) + "VcF String is" +  vCard.get(i));                     
            cursor.moveToNext();                                        
        }           

        StringBuffer s = new StringBuffer();
        s.append( vCard.toString());                
        string = s.toString();                           
        file = new File(string);        

    //  Log.i("s", ""+s);   
    //  Log.i("string", ""+string); 
        Log.i("file", ""+file);             

    } else {
        Log.i("TAG", "No Contacts in Your Phone");
    }        
}       

public void get(Cursor cursor) {

    String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
    Log.i("lookupKey", ""+lookupKey);
    Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);     

    try {
        AssetFileDescriptor fd = this.getContentResolver().openAssetFileDescriptor(uri, "r");          

        FileInputStream fis = fd.createInputStream();
        byte[] buf = new byte[(int) fd.getDeclaredLength()];
        fis.read(buf);
        String vcardstring= new String(buf);          

        String storage_path = Environment.getExternalStorageDirectory().toString() + File.separator + vfile;
        FileOutputStream mFileOutputStream = new FileOutputStream(storage_path, true);
        mFileOutputStream.write(vcardstring.toString().getBytes());

        vCard.add(storage_path);            

    } catch (Exception e1)  {            
        e1.printStackTrace();
    }
}       

private void data() {       

    File filelocation = file;     
    Intent sharingIntent = new Intent(Intent.ACTION_SEND);
    sharingIntent.setType("vnd.android.cursor.dir/email");      
    sharingIntent.setType("application/x-vcard");             
    sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+filelocation));
    startActivity(Intent.createChooser(sharingIntent, "Send email"));            
}
}    
like image 589
NagarjunaReddy Avatar asked Oct 09 '12 10:10

NagarjunaReddy


1 Answers

finally my issue is solved using like this

     public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);     

     mContext = this; 

     button = (Button) findViewById(R.id.send);          
     button.setOnClickListener(new OnClickListener() {          
        public void onClick(View v) {        
            data();
        }
    });                      

    /**
     * This Function For Vcard And here i take one Array List in Which i
     * store every Vcard String of Every Contact Here i take one Cursor and
     * this cursor is not null and its count>0 than i repeat one loop up to
     * cursor.getcount() means Up to number of phone contacts. And in Every
     * Loop i can make vcard string and store in Array list which i declared
     * as a Global. And in Every Loop i move cursor next and print log in
     * logcat.
     * */
    getVcardString();           
}       

 public static void getVcardString() {   

    String path = null;     
    String vfile = null;

     vfile = "Contacts.vcf";           
    Cursor phones = mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                    null, null, null);

    phones.moveToFirst();
    Log.i("Number of contacts", "cursorCount" +phones.getCount());  
    for(int i =0;i<phones.getCount();i++)   {       

         String lookupKey = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
         Log.i("lookupKey", " " +lookupKey);
         Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
         AssetFileDescriptor fd;

         try  {
             fd = mContext.getContentResolver().openAssetFileDescriptor(uri, "r");
             FileInputStream fis = fd.createInputStream();
             byte[] buf = new byte[(int) fd.getDeclaredLength()];
             fis.read(buf);
             String VCard = new String(buf);          

             path = Environment.getExternalStorageDirectory().toString() + File.separator + vfile;
             FileOutputStream mFileOutputStream = new FileOutputStream(path, true);
             mFileOutputStream.write(VCard.toString().getBytes());    

             phones.moveToNext();               

             filevcf = new File(path);
             Log.i("file", "file" +filevcf);

         }catch(Exception e1) {
             e1.printStackTrace();  
         }
    }       
    Log.i("TAG", "No Contacts in Your Phone");          
}

protected void data() {             
    File filelocation = filevcf ;     
    Intent sharingIntent = new Intent(Intent.ACTION_SEND);
    sharingIntent.setType("vnd.android.cursor.dir/email");      
    sharingIntent.setType("application/x-vcard");       
    sharingIntent.putExtra(Intent.EXTRA_EMAIL, "[email protected]" );        
    sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+filelocation.getAbsolutePath()));
    startActivity(Intent.createChooser(sharingIntent, "Send email"));            
 }  
like image 124
NagarjunaReddy Avatar answered Nov 05 '22 08:11

NagarjunaReddy