2012-01-05 13 views
5

Estoy tratando de desarrollar una función en mi aplicación para hacer copias de seguridad de sms y contactos a la tarjeta SD como formato .xml o .csv y restaurarlo más tarde.cómo hacer una copia de seguridad de contactos o sms a la tarjeta SD como archivo .xml o archivo .csv y restaurarlo más tarde

, por favor, que alguien me dé algunas sugerencias o algún código de muestra o cualquier enlace de recursos relacionado con esto.

gracias de antemano

+0

mmh ya que escribe la copia de seguridad util usted mismo, debe saber qué es lo que realmente está copiando. – Peter

+0

@peter puede darme algunos tutoriales url relacionados con mi publicación – agiles

+0

http://www.google.com/search?q=android+api+file+system – Peter

Respuesta

7
public ArrayList<String> smsBuffer = new ArrayList<String>(); 
    String smsFile = "SMS"+".csv"; 
     private void backupSMS(){ 
    smsBuffer.clear(); 
    Uri mSmsinboxQueryUri = Uri.parse("content://sms"); 
    Cursor cursor1 = getContentResolver().query(
      mSmsinboxQueryUri, 
      new String[] { "_id", "thread_id", "address", "person", "date", 
        "body", "type" }, null, null, null); 
    //startManagingCursor(cursor1); 
    String[] columns = new String[] { "_id", "thread_id", "address", "person", "date", "body", 
      "type" }; 
    if (cursor1.getCount() > 0) { 
     String count = Integer.toString(cursor1.getCount()); 
     Log.d("Count",count); 
     while (cursor1.moveToNext()) { 

      String messageId = cursor1.getString(cursor1 
        .getColumnIndex(columns[0])); 

      String threadId = cursor1.getString(cursor1 
        .getColumnIndex(columns[1])); 

      String address = cursor1.getString(cursor1 
        .getColumnIndex(columns[2])); 
      String name = cursor1.getString(cursor1 
        .getColumnIndex(columns[3])); 
      String date = cursor1.getString(cursor1 
        .getColumnIndex(columns[4])); 
      String msg = cursor1.getString(cursor1 
        .getColumnIndex(columns[5])); 
      String type = cursor1.getString(cursor1 
        .getColumnIndex(columns[6])); 



      smsBuffer.add(messageId + ","+ threadId+ ","+ address + "," + name + "," + date + " ," + msg + " ," 
        + type); 

     }   
     generateCSVFileForSMS(smsBuffer); 
    }    
} 


private void generateCSVFileForSMS(ArrayList<String> list) 
{ 

    try 
    { 
     String storage_path = Environment.getExternalStorageDirectory().toString() + File.separator + smsFile; 
     FileWriter write = new FileWriter(storage_path); 

     write.append("messageId, threadId, Address, Name, Date, msg, type"); 
     write.append('\n'); 

     for (String s : list) 
     { 
      write.append(s); 
      write.append('\n'); 
     } 
     write.flush(); 
     write.close(); 
    } 

    catch (NullPointerException e) 
    { 
     System.out.println("Nullpointer Exception "+e); 
     // e.printStackTrace(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

} 
+0

Pero cómo restaurar sms desde el archivo csv ? – Azahar

+0

¿Cómo puedo verificar el archivo de copia de seguridad sms.cvs en mis tarjetas SD? No puedo encontrar ningún archivo csv en mi tarjeta sd después de ejecutar el código anterior. por favor, ayúdame a encontrar el archivo de respaldo. –

1
package com.vcard; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.util.ArrayList; 

import android.app.Activity; 
import android.content.res.AssetFileDescriptor; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.ContactsContract; 
import android.util.Log; 
import android.view.View; 

public class VCardActivity extends Activity 
{ 
Cursor cursor; 
ArrayList<String> vCard ; 
String vfile; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    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 Conatact 
    * 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() { 
    // TODO Auto-generated method stub 
    vCard = new ArrayList<String>(); 
    cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
    if(cursor!=null&&cursor.getCount()>0) 
    { 
     cursor.moveToFirst(); 
     for(int i =0;i<cursor.getCount();i++) 
     { 

      get(cursor); 
      Log.d("TAG", "Contact "+(i+1)+"VcF String is"+vCard.get(i)); 
      cursor.moveToNext(); 
     } 

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

} 

public void get(Cursor cursor) 
{ 


    //cursor.moveToFirst(); 
    String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 
    Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey); 
    AssetFileDescriptor fd; 
    try { 
     fd = this.getContentResolver().openAssetFileDescriptor(uri, "r"); 

     // Your Complex Code and you used function without loop so how can you get all Contacts Vcard.?? 


     /* FileInputStream fis = fd.createInputStream(); 
     byte[] buf = new byte[(int) fd.getDeclaredLength()]; 
     fis.read(buf); 
     String VCard = new String(buf); 
     String path = Environment.getExternalStorageDirectory().toString() + File.separator + vfile; 
     FileOutputStream out = new FileOutputStream(path); 
     out.write(VCard.toString().getBytes()); 
     Log.d("Vcard", VCard);*/ 

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

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

    } catch (Exception e1) 
    { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
} 
} 

Esto puede ayudar a tomar los contactos como archivo VCF. Para tomar una copia de seguridad de sms, utilice este método como el mismo para la copia de seguridad de sms.

+0

gracias por su respuesta – agiles

Cuestiones relacionadas