AndroidのContentProvider - システムのContentProviderを使って連絡先を登録する
Android自身は大量のContentProviderを提供してあり、それぞれquery(),insert(),delete(),update()などを実装してある。
- ContactsContract.Contacts.CONTENT_URI : 連絡先管理Uri
- ContactsContract.CommonDataKinds.Phone.CONTENT_URI : 連絡先電話番号のUri
- ContactsContract.CommonDataKinds.Email.CONTENT_URI : 連絡先EmailのUri
連絡先登録のサンプル
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.liguofeng.addcontact" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.WRITE_CONTACTS"/> </manifest>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="連絡先名"/> <EditText android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="携帯番号"/> <EditText android:id="@+id/phone" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="E-mail" /> <EditText android:id="@+id/email" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/registBtn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="連絡先登録" /> </LinearLayout>
package com.example.liguofeng.addcontact; import android.app.Activity; import android.content.ContentUris; import android.content.ContentValues; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.RawContacts.Data; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Button Button registeBtn = (Button) findViewById(R.id.registBtn); registeBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 連絡先として登録するデータ String name = ((EditText) findViewById(R.id.name)).getText().toString(); String phone = ((EditText) findViewById(R.id.phone)).getText().toString(); String email = ((EditText) findViewById(R.id.email)).getText().toString(); // 現在のrawContactId取得 ContentValues values = new ContentValues(); Uri rawContactsUri = getContentResolver().insert( ContactsContract.RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactsUri); values.clear(); // データクリア // 連絡先名登録 values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); values.put(StructuredName.GIVEN_NAME, name); // 登録 getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); values.clear(); // データクリア // 携帯番号登録 values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); values.put(Phone.NUMBER, phone); values.put(Phone.TYPE, Phone.TYPE_MOBILE); // 登録 getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); values.clear(); // データクリア // EMAIL登録 values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); values.put(Email.DATA, email); values.put(Email.TYPE, Email.TYPE_WORK); // 登録 getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values); Toast.makeText(MainActivity.this, "登録完了", Toast.LENGTH_LONG).show(); } }); } }