Setting contact ringtone, how?

I know how to change the ringtone, as well as how to get contacts, but how can I set the ringtone for a specific contact?

So how can I use the method: ContactsContract.Contacts.CUSTOM_RINGTONE ?

I tried this as follows:

 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); 

But it does not work.

+5
source share
3 answers

I found out how it works. Below you can see the fixed code:

  Uri contactData = ContactsContract.Contacts.CONTENT_URI; String contactId = contactData.getLastPathSegment(); Cursor localCursor = managedQuery(contactData, PROJECTION, null, null, null); localCursor.move(120/*CONTACT ID NUMBER*/); String str1 = localCursor.getString(localCursor.getColumnIndexOrThrow("_id")); String str2 = localCursor.getString(localCursor.getColumnIndexOrThrow("display_name")); Uri localUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, str1); ContentValues localContentValues = new ContentValues(); localContentValues.put(ContactsContract.Data.RAW_CONTACT_ID, contactId); localContentValues.put(ContactsContract.Data.CUSTOM_RINGTONE, f.getAbsolutePath()+"/Adventure.ogg"); getContentResolver().update(localUri, localContentValues, null, null); Toast.makeText(this, "Ringtone assigned to: " + str2, 0).show(); 

Just change the contact id number to the contact id you want to change.

+8
source

To open the default contact for android, use this code:

 // put that constant in your class static public final int CONTACT_CHOOSER_ACTIVITY_CODE = 73729; // start contact search activity within any method you like Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(ContactsContract.Contacts.CONTENT_TYPE); startActivityForResult(intent, CONTACT_CHOOSER_ACTIVITY_CODE); 

In the onActivityResult method, you can use this code (similar to Rotary Heart ) to set the ringtone:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case (CONTACT_CHOOSER_ACTIVITY_CODE) : if (resultCode == Activity.RESULT_OK) { try{ Uri contactData = data.getData(); String contactId = contactData.getLastPathSegment(); String[] PROJECTION = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER, }; Cursor localCursor = getContentResolver().query(contactData, PROJECTION, null, null, null); localCursor.moveToFirst(); //--> use moveToFirst instead of this: localCursor.move(Integer.valueOf(contactId)); /*CONTACT ID NUMBER*/ String contactID = localCursor.getString(localCursor.getColumnIndexOrThrow("_id")); String contactDisplayName = localCursor.getString(localCursor.getColumnIndexOrThrow("display_name")); Uri localUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contactID); localCursor.close(); ContentValues localContentValues = new ContentValues(); localContentValues.put(ContactsContract.Data.RAW_CONTACT_ID, contactId); localContentValues.put(ContactsContract.Data.CUSTOM_RINGTONE, f.getAbsolutePath()+"/Adventure.ogg"); getContentResolver().update(localUri, localContentValues, null, null); Toast.makeText(this, "Ringtone assigned to: " + contactDisplayName, Toast.LENGTH_LONG).show(); } catch(Exception ex){ Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show(); } } break; } } 

Note: you still need to set the f variable (in the code f.getAbsolutePath () + "/Adventure.ogg") to your file (ringtone) that you want to set.

This code has been tested with Android 2.3. Perhaps higher versions require changes.

+3
source

@Rotary Heart you can tell me how I can set my own melody for a specific contact.

0
source

All Articles