Как изменить рингтон на андроиде программно?

Я пытаюсь написать приложение, которое (среди прочего) изменит мелодию звонка пользователя в зависимости от его местоположения.

Однако у меня возникают трудности с установкой мелодии звонка телефона из моего приложения. Мне удалось отобразить список мелодий телефона и использовать следующий код, чтобы попытаться установить мелодию звонка:

RingtoneManager.setActualDefaultRingtoneUri(applicationContext, 
      RingtoneManager.TYPE_RINGTONE,
      MediaStore.Audio.Media.getContentUriForPath(settings.getRingtoneURI()));

Settings.System.putString(c.getContentResolver(), Settings.System.RINGTONE, 
      settings.getRingtoneURI());

где settings.getRingtoneURI() возвращает строку с URI нужного рингтона.

Когда я запускаю это, я не получаю никаких ошибок, но мелодия звонка не меняется.

Любой совет?


person dckrooney    schedule 31.05.2011    source источник
comment
Дубликат stackoverflow.com/questions/1271777/   -  person John Leehey    schedule 02.06.2011
comment
Я действительно видел этот вопрос, прежде чем опубликовать свой собственный. Однако я не пытаюсь применить рингтон, создав URI из источника звука. Я хочу использовать одну из существующих мелодий звонка телефона. Я могу отобразить диалоговое окно, в котором перечислены доступные мелодии звонка, но по какой-то причине приведенный выше код не устанавливает мелодию звонка по умолчанию для выбора пользователя.   -  person dckrooney    schedule 04.06.2011
comment
пожалуйста, обратитесь к следующему вопросу stackoverflow.com/questions/1271777/   -  person dharam    schedule 12.07.2011
comment
@dhams: Это тот же вопрос, на который указал Джон.   -  person dckrooney    schedule 20.07.2011


Ответы (1)


Приведенный ниже код выбирает любой случайный сигнал с мобильного телефона для входящего вызова.

            RingtoneManager rm = new RingtoneManager(context);
    Random random = new Random();

    int i = rm.getRingtonePosition(RingtoneManager
            .getActualDefaultRingtoneUri(context,
                    RingtoneManager.TYPE_RINGTONE));
    MyApplication.APPLICATION_SHARED_PREFERENCE.edit()
            .putInt(MyConstants.PHONE_RINGTONE_NUMBER, i).commit();
    int chanegToneNumber;
    Cursor cursor = rm.getCursor();

    while (true) {
        chanegToneNumber = random.nextInt(cursor.getCount());
        if (chanegToneNumber != i)
            break;
    }

    Log.d(TAG, "Tone: " + i);

    Log.d(TAG, "Tone total: " + cursor.getCount());

    while (cursor.moveToNext()) {

        if (i == cursor.getInt(cursor
                .getColumnIndex(MediaStore.MediaColumns._ID))) {
            RingtoneManager.setActualDefaultRingtoneUri(context,
                    RingtoneManager.TYPE_RINGTONE,
                    rm.getRingtoneUri(chanegToneNumber));
            break;
        }
    }
person Hafiz Waleed Hussain    schedule 19.09.2012
comment
MyApplication.APPLICATION_SHARED_PREFERENCE.edit() .putInt(MyConstants.PHONE_RINGTONE_NUMBER, i).commit(); Скажите, пожалуйста, значение этой строки? - person Sritam Jagadev; 15.04.2015
comment
Шритам Джагадев. По сути, я использую этот номер тона еще в одном месте. Вот почему я сохраняю в файле. Но здесь для вас это может быть излишним. Спасибо за хороший вопрос. - person Hafiz Waleed Hussain; 17.04.2015