2012-01-05 13 views
5

Tôi đang cố gắng phát triển một tính năng trong ứng dụng của mình để sao lưu sms và danh bạ sang Thẻ SD dưới dạng .xml hoặc .csv khôi phục lại sau.cách sao lưu danh bạ hoặc sms vào thẻ SD dưới dạng tệp .xml hoặc .csv và khôi phục sau

vì vậy, vui lòng bất kỳ ai cho tôi một số đề xuất hoặc một số mã mẫu hoặc bất kỳ liên kết tài nguyên nào có liên quan đến điều này.

cảm ơn trước

+0

mmh kể từ khi bạn tự viết bản sao lưu, bạn nên tự biết mình đang thực sự sao lưu. – Peter

+0

@peter u có thể cung cấp cho tôi một số url hướng dẫn liên quan đến bài đăng của tôi – agiles

+0

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

Trả lời

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

Nhưng Cách khôi phục sms từ tệp csv ? – Azahar

+0

Làm thế nào tôi có thể kiểm tra tập tin sms.cvs sao lưu trong thẻ sd của tôi. Tôi không thể tìm thấy bất kỳ tập tin csv trong thẻ sd của tôi sau khi thực thi mã trên. hãy giúp tôi tìm tệp sao lưu. –

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

này có thể giúp bạn để có những hệ như tập tin VCF. Đối với việc sử dụng sao lưu tin nhắn SMS sử dụng phương pháp này giống như cho sao lưu tin nhắn SMS.

+0

cảm ơn trả lời ur – agiles