如何从.vcf文件恢复android中的联系人?

问题描述:

你好*我想开发一个应用程序,它可以备份和恢复通讯录,backup是没有问题的,但是恢复的问题,这里是我的代码如何从.vcf文件恢复android中的联系人?

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"/> 

我可以以上述方式恢复,但问题是,当代码段被调用时,我得到一个提示选择应用程序打开文件的提示对话框,当我选择Contact应用程序它将工作,但我希望恢复时自动发生我们点击按钮请帮助学习,并帮助我解决这个谜题。

在此先感谢。

+0

这将是一个很大的帮助,如果你能提供你的整个代码,这样我可以运行,并得到您的问题 – Meenal

+0

的理解,请参阅完整的后期编辑源代码@Meenal Sharma,谢谢。 –

使用此代码,以恢复接触

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夏尔马,但问题仍在继续。 –

+0

当我在我的设备上运行它时,它只是要求对话我在哪里wana店联系 – Meenal

+0

而恢复呢? –