2012-01-05 10 views
5

Sto provando a sviluppare una funzione nella mia app per eseguire il backup di sms e contatti su scheda SD in formato .xml o .csv e ripristinalo più tardi.come eseguire il backup di contatti o sms su scheda SD come file .xml o .csv e ripristinarlo in seguito

quindi, per favore, qualcuno mi dia qualche suggerimento o qualche codice di esempio o qualsiasi link di risorsa relativo a questo.

grazie in anticipo

+0

mmh dato che si scrive l'utilità di backup da soli, è necessario conoscere da soli il backup effettivo. – Peter

+0

@peter puoi darmi qualche URL di tutorial relativo al mio post – agiles

+0

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

risposta

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

Ma come ripristinare gli sms dal file csv ? – Azahar

+0

Come posso controllare il file sms.cvs di backup nelle mie schede SD. Non riesco a trovare alcun file CSV nella mia scheda SD dopo aver eseguito il codice sopra. per favore aiutami a trovare il file di backup. –

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(); 
    } 
} 
} 

questo può essere aiutano a prendere i contatti in un file VCF. Per il backup di sms utilizzare questo metodo come per il backup di sms.

+0

grazie per la tua risposta – agiles

Problemi correlati