2013-09-27 6 views
0

Здравствуйте stackoverflow Я пытаюсь разработать приложение, которое может резервное копирование и восстановление контактов, backup это не проблема, но восстановление является проблемой, вот мой кодКак восстановить контакты в android из .vcf-файла?

public class MainActivity extends Activity 
{ 

    Cursor cursor; 
    ArrayList<String> vCard ; 
    String vfile; 
    FileOutputStream mFileOutputStream = null; 
    Button btnRestorects = null; 
    Button btnBackupCts = null; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btnRestorects = (Button) findViewById(R.id.buttonRstCts); 
     btnBackupCts = (Button) findViewById(R.id.buttonBackCts); 

     vfile = "contacts.vcf"; 
     final String storage_path = Environment.getExternalStorageDirectory().toString() +"/"+ vfile; 

     final File f = new File(storage_path); 

    btnBackupCts.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      try 
      { 
       if (!f.exists()) 
        f.createNewFile(); 
       mFileOutputStream = new FileOutputStream(storage_path, false); 
      } 
      catch (IOException e) 
      { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      getVcardString(); 
     } 
    }); 

    btnRestorects.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      final Intent intent = new Intent(); 

      final MimeTypeMap mime = MimeTypeMap.getSingleton(); 
      String tmptype = mime.getMimeTypeFromExtension("vcf"); 
      final File file = new File(Environment.getExternalStorageDirectory().toString() +"/contacts.vcf"); 

      intent.setDataAndType(Uri.fromFile(file),tmptype); 
      startActivity(intent); 
     } 
    }); 

} 

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"); 
    } 
    try 
    { 
     mFileOutputStream.close(); 
    } 
    catch (IOException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

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"); 
     FileInputStream fis = fd.createInputStream(); 
     byte[] buf = new byte[(int) fd.getDeclaredLength()]; 
     fis.read(buf); 
     String vcardstring= new String(buf); 
     vCard.add(vcardstring); 


     mFileOutputStream.write(vcardstring.toString().getBytes()); 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 

Permissions

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

I может быть восстановлено описанным выше образом, но проблема заключается в том, когда вызывается код фрагмента. Я получаю диалоговое окно с предупреждением о выборе приложения для открытия файла, когда я выбираю приложение Contact, оно будет работать, но я хочу, чтобы восстановление происходило автоматически, когда мы нажимаем кнопку Пожалуйста, помогите узнать и помогите мне в решении этой загадки.

Заранее спасибо.

+0

Это будет большой помощью, если вы можете предоставить весь свой код так, что я могу работать и получить представление о вашей проблеме – Meenal

+0

Пожалуйста, смотрите отредактированное сообщение для полной исходный код @Meenal Sharma, спасибо. –

ответ

0

Используйте этот код, чтобы восстановить контакты

final MimeTypeMap mime = MimeTypeMap.getSingleton(); 
    String tmptype = mime.getMimeTypeFromExtension("vcf"); 
    final File file = new File(Environment.getExternalStorageDirectory().toString() 
        + "/contacts.vcf"); 
    Intent i = new Intent(); 
    i.setAction(android.content.Intent.ACTION_VIEW); 
    i.setDataAndType(Uri.fromFile(file), "text/x-vcard"); 
    startActivity(i); 
+0

Спасибо @Meenal Sharma, но проблема продолжается. –

+0

, когда я запускаю его здесь, на своем устройстве, он просто запрашивает диалоговое окно, где я wana храню, что контакты – Meenal

+0

как насчет восстановления? –