Establecer contacto tono personalizado, ¿cómo?

Sé cómo cambiar el tono de llamada del teléfono, también cómo obtener contactos, pero ¿cómo puedo configurar un tono de llamada para un contacto específico?

Entonces, ¿cómo uso el método?ContactsContract.Contacts.CUSTOM_RINGTONE?

Lo he intentado así:

Uri contactUri = ContactsContract.Contacts.CONTENT_URI;
String[] PROJECTION = new String[] {
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME,
    ContactsContract.Contacts.HAS_PHONE_NUMBER,
};

String SELECTION = ContactsContract.Contacts.HAS_PHONE_NUMBER + "='1'";
Cursor contacts = managedQuery(contactUri, PROJECTION, SELECTION, null, null );

while (contacts.moveToNext())
{
    String Name=contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
}

String str1 = contacts.getString(contacts.getColumnIndexOrThrow("_id"));

Uri localUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, str1);
ContentValues localContentValues = new ContentValues();
localContentValues.put(ContactsContract.Contacts.CUSTOM_RINGTONE, 
    f.getAbsolutePath()+"/Adveture.ogg");
    MainActivity.this.getContentResolver().update(localUri, localContentValues, null, null);

Pero no está funcionando.

Respuestas a la pregunta(2)

Su respuesta a la pregunta