Setting contact custom ringtone, how?

后端 未结 2 1742
隐瞒了意图╮
隐瞒了意图╮ 2020-12-03 12:40

I know how to change phone ringtone, also how to get contacts, but how can I set a ringtone for a specific contact?

So how do I use the method: ContactsContra

相关标签:
2条回答
  • 2020-12-03 13:17

    To open the default contact search of 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's code) to set the contacts 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 have to set the f variable (in code f.getAbsolutePath()+"/Adventure.ogg") to your file (ringtone) you like to set.

    This code was tested with android 2.3. Maybe there are changes necessary for higher versions.

    0 讨论(0)
  • 2020-12-03 13:29

    I found out how it works. Below you can see the fixed code 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 id of the contact you want to change.

    0 讨论(0)
提交回复
热议问题