直接在手机的通讯录的数据库中添加列表
相关代码如下
package com.example.test;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.os.RemoteException;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
import android.content.ContentResolver;
import android.content.OperationApplicationException;
import android.net.Uri;
import android.provider.ContactsContract;
import android.test.AndroidTestCase;
import android.util.Log;
public class MainActivity extends ActionBarActivity {
private static final String TAG = "ContactsWriteTest";
//[content://com.android.contacts/raw_contacts]
private static final Uri RAW_CONTACTS_URI = ContactsContract.RawContacts.CONTENT_URI;
//[content://com.android.contacts/data]
private static final Uri DATA_URI = ContactsContract.Data.CONTENT_URI;
private static final String ACCOUNT_TYPE = ContactsContract.RawContacts.ACCOUNT_TYPE;
private static final String ACCOUNT_NAME = ContactsContract.RawContacts.ACCOUNT_NAME;
private static final String RAW_CONTACT_ID = ContactsContract.Data.RAW_CONTACT_ID;
private static final String MIMETYPE = ContactsContract.Data.MIMETYPE;
private static final String NAME_ITEM_TYPE = ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE;
private static final String DISPLAY_NAME = ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME;
private static final String PHONE_ITEM_TYPE = ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE;
private static final String PHONE_NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
private static final String PHONE_TYPE = ContactsContract.CommonDataKinds.Phone.TYPE;
private static final int PHONE_TYPE_HOME = ContactsContract.CommonDataKinds.Phone.TYPE_HOME;
private static final int PHONE_TYPE_MOBILE = ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE;
private static final String EMAIL_ITEM_TYPE = ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE;
private static final String EMAIL_DATA = ContactsContract.CommonDataKinds.Email.DATA;
private static final String EMAIL_TYPE = ContactsContract.CommonDataKinds.Email.TYPE;
private static final int EMAIL_TYPE_HOME = ContactsContract.CommonDataKinds.Email.TYPE_HOME;
private static final int EMAIL_TYPE_WORK = ContactsContract.CommonDataKinds.Email.TYPE_WORK;
private static final String AUTHORITY = ContactsContract.AUTHORITY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt=(Button)findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("TEST", "button onClick");
TextView TextView1=(TextView)findViewById(R.id.view);
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
ContentProviderOperation operation = ContentProviderOperation.newInsert(RAW_CONTACTS_URI)
.withValue(ACCOUNT_TYPE, null)
.withValue(ACCOUNT_NAME, null)
.build();
operations.add(operation);
//添加联系人名称操作
operation = ContentProviderOperation.newInsert(DATA_URI)
.withValueBackReference(RAW_CONTACT_ID, 0)
.withValue(MIMETYPE, NAME_ITEM_TYPE)
.withValue(DISPLAY_NAME, "Scott Liu")
.build();
operations.add(operation);
//添加家庭座机号码
operation = ContentProviderOperation.newInsert(DATA_URI)
.withValueBackReference(RAW_CONTACT_ID, 0)
.withValue(MIMETYPE, PHONE_ITEM_TYPE)
.withValue(PHONE_TYPE, PHONE_TYPE_HOME)
.withValue(PHONE_NUMBER, "01034567890")
.build();
operations.add(operation);
//添加移动手机号码
operation = ContentProviderOperation.newInsert(DATA_URI)
.withValueBackReference(RAW_CONTACT_ID, 0)
.withValue(MIMETYPE, PHONE_ITEM_TYPE)
.withValue(PHONE_TYPE, PHONE_TYPE_MOBILE)
.withValue(PHONE_NUMBER, "13534567890")
.build();
operations.add(operation);
//添加家庭邮箱
operation = ContentProviderOperation.newInsert(DATA_URI)
.withValueBackReference(RAW_CONTACT_ID, 0)
.withValue(MIMETYPE, EMAIL_ITEM_TYPE)
.withValue(EMAIL_TYPE, EMAIL_TYPE_HOME)
.withValue(EMAIL_DATA, "scott@android.com")
.build();
operations.add(operation);
//添加工作邮箱
operation = ContentProviderOperation.newInsert(DATA_URI)
.withValueBackReference(RAW_CONTACT_ID, 0)
.withValue(MIMETYPE, EMAIL_ITEM_TYPE)
.withValue(EMAIL_TYPE, EMAIL_TYPE_WORK)
.withValue(EMAIL_DATA, "scott@msapple.com")
.build();
operations.add(operation);
ContentResolver resolver = getBaseContext().getContentResolver();
//批量执行,返回执行结果集
ContentProviderResult[] results = null;
try {
results = resolver.applyBatch(AUTHORITY, operations);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (ContentProviderResult result : results) {
Log.i(TAG, result.uri.toString());
TextView1.setText(result.uri.toString());
}
}
});
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
特别注意在打开通讯录的数据库的权限
<uses-permission android:name="android.permission.WRITE_CONTACTS" />