Come mai devi usare questo: <data android:mimeType="vnd.android.cursor.dir/data"></data> ?
Nel listato che hai postato non hai messo nulla di deprecato.
Io nel programma che avevo fatto non scrivevo nel content provider dei contatti, ma li leggevo e basta (Ho scritto sul content degli SMS).
Come URI usavo quello dato da Contacts.CONTENT_URI
codice:
final Cursor c = getContentResolver().query(Contacts.CONTENT_URI, null,
null, null, ContactsContract.Contacts.DISPLAY_NAME);
startManagingCursor(c);
o da Data.CONTENT_URI
codice:
String[] proiezione = new String[] {
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.TYPE };
String where = ContactsContract.Data.CONTACT_ID + " = " + position
+ " AND " + ContactsContract.Data.MIMETYPE + " = \""
+ ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
+ "\"";
final Cursor cur = getContentResolver().query(Data.CONTENT_URI,
proiezione, where, null, null);
startManagingCursor(cur);
ArrayList<String> tipo = new ArrayList<String>();
ArrayList<String> numTel = new ArrayList<String>();
ArrayList<Integer> indTipo = new ArrayList<Integer>();
if (cur.moveToFirst()) {
do {
tipoNumTemp = cur
.getString(cur
.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.TYPE));
numTemp = cur
.getString(cur
.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (numTemp != null && !numTemp.contentEquals("")) {
numTel.add(numTemp);
indTipo.add(Integer.parseInt(tipoNumTemp));
tipoNumTemp = risorse.getStringArray(R.array.tipo_numero)[Integer
.parseInt(tipoNumTemp) - 1];
tipo.add(tipoNumTemp);
}
} while (cur.moveToNext());
}
Prova a studiarti come ho usato i vari metodi ed applicarli al tuo caso.
E auguri!!