如何将所有联系人从vcf文件直接保存到android设备中的phonememory

时间:2014-12-19 10:50:35

标签: android android-intent

我是一个Android应用程序,它从vcf file获取联系人并保存到Android设备,代码是:

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

将所有联系人保存到设备中 但问题是它希望用户界面选择保存的位置。但我想直接保存到PhoneMemory或Phonebook。我不想在插入Contacts时有任何其他选项。我在网上搜索找不到任何答案请帮助找出这个

1 个答案:

答案 0 :(得分:0)

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

/** Called when the activity is first created. */
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mContext = VCardActivity.this;
        getVCF();
    }

    public static void getVCF() {
        final String vfile = "Contacts.vcf";
        Cursor phones = mContext.getContentResolver().query(
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        phones.moveToFirst();
        for (int i = 0; i < phones.getCount(); i++) {
            String lookupKey = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
            Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
            AssetFileDescriptor fd;
            try {
                fd = mContext.getContentResolver().openAssetFileDescriptor(uri, "r");
                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 mFileOutputStream = new FileOutputStream(path, true);
                mFileOutputStream.write(VCard.toString().getBytes());
                phones.moveToNext();
                Log.d("Vcard", VCard);
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    }
}

Add on Manifest:

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

感谢:https://stackoverflow.com/a/12048639/2378691