Установить в качестве мелодии звонка для контакта? Андроид

Я пытаюсь узнать, как добавить функцию «Установить в качестве контактной мелодии звонка». Я уже знаю, как установить мелодию звонка по умолчанию, но не могу понять, как установить мелодию звонка для контакта. Я добрался до той части, где я выбираю контакт, но я не знаю, как назначить рингтон этому контакту. Эта часть беспокоит меня, и я не могу найти ответ на вопросы, которые уже были заданы по этой теме. Вот мой код:

static public final int CONTACT_CHOOSER_ACTIVITY_CODE = 73729;
private File csound;
private final File rpath = new File(Environment.getExternalStorageDirectory() + "/Ringtone sounds/Ringtones");


    @Override
    public void onClick(View v) {
        setContRing();

    }

    private void setContRing() {
        Boolean success = false;
        csound = new File(rpath, FNAME);rpath.mkdirs();
        if (!csound.exists()) {




            try {
                InputStream in = getResources().openRawResource(FPATH);
                FileOutputStream out = new FileOutputStream(csound.getPath());
                byte[] buff = new byte[1024];
                int read = 0;

                try {
                    while ((read = in.read(buff)) > 0) {
                        out.write(buff, 0, read);
                    }
                } finally {
                    in.close();

                    out.close();
                }
            } catch (Exception e) {
                success = false;

            }
        } else {
            success = true;
            setContRingtone();

        }

        if (!success) { 
           setContRingtone();


        }
    }

    private void setContRingtone() {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
        startActivityForResult(intent, CONTACT_CHOOSER_ACTIVITY_CODE);

    }




});


}

Изменить за вознаграждение: мне интересно, может ли кто-нибудь показать мне, как это сделать, я пробовал с кодами, найденными в других вопросах, но не смог применить их к своему коду. Я могу скопировать файл, но как получить контакт и назначить мелодию для этого контакта?


person Slim C.    schedule 01.05.2014    source источник
comment
Вы можете найти это полезным: как установить мелодию звонка для отдельного контакта на Android"> stackoverflow.com/questions/2437922/ stackoverflow.com/questions/14230444/   -  person JiTHiN    schedule 03.05.2014


Ответы (1)


От установить собственную мелодию звонка на определенный контактный номер

В Android для этого есть специальная колонка: ContactsContract.CUSTOM_RINGTONE.

Таким образом, вы можете использовать ContactsContract.Contacts.getLookupUri, чтобы получить Uri вашего контакта, после чего почти все, что осталось, это позвонить ContentResolver.update.

Вот пример поиска контакта по номеру телефона с последующим применением пользовательской мелодии звонка:

import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.PhoneLookup;

// The Uri used to look up a contact by phone number
final Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, "012-345-6789");
// The columns used for `Contacts.getLookupUri`
final String[] projection = new String[] {
    Contacts._ID, Contacts.LOOKUP_KEY
};
// Build your Cursor
final Cursor data = getContentResolver().query(lookupUri, projection, null, null, null);
data.moveToFirst();
try {
    // Get the contact lookup Uri
    final long contactId = data.getLong(0);
    final String lookupKey = data.getString(1);
    final Uri contactUri = Contacts.getLookupUri(contactId, lookupKey);
    if (contactUri == null) {
        // Invalid arguments
        return;
    }

    // Get the path of ringtone you'd like to use
    final String storage = Environment.getExternalStorageDirectory().getPath();
    final File file = new File(storage + "/AudioRecorder", "hello.mp4");
    final String value = Uri.fromFile(file).toString();

    // Apply the custom ringtone
    final ContentValues values = new ContentValues(1);
    values.put(Contacts.CUSTOM_RINGTONE, value);
    getContentResolver().update(contactUri, values, null, null);
} finally {
    // Don't forget to close your Cursor
    data.close();
}

Кроме того, вам нужно будет добавить оба разрешения на чтение и запись контактов:

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

Чтобы немного расширить это и изменить его в соответствии с вашими потребностями, измените номер телефона 012-345-6789 в этой строке на тот, который вы ищете.

// The Uri used to look up a contact by phone number
final Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, "012-345-6789");

И установите свой CUSTOM_RINGTONE по умолчанию в вашем телефоне ContactsContract. Здесь есть еще один похожий вариант: Как установить контактную мелодию звонка?

person zgc7009    schedule 03.05.2014
comment
Проблема не в этом, проблема в применении этого к моему существующему коду. - person Slim C.; 04.05.2014
comment
@Sabroan То, что вы дали, мало что дает. Кажется, все, что вы делаете на самом деле, это получаете файл и запускаете намерение. Почему бы просто не изменить код, который работает, чтобы делать то, что вам нужно? Это даже не мой ответ, я просто перепечатывал его из другого вопроса, но это кажется проще, чем начинать с нуля. - person zgc7009; 04.05.2014