Bringoff
@Bringoff
Android dev at Freelance

Как программно сменить рингтон на Android 4.0+?

Имеется путь к файлу, который надо с BrоadcastReceiver-а поставить на звонок. Нормального, понятного ответа так и не нашел. Кто может предложить рабочий вариант? Лучше всего - метод, куда передал полный путь к файлу и имя файла, и в нем произвелась вся грязная работа.
  • Вопрос задан
  • 2511 просмотров
Решения вопроса 1
Bringoff
@Bringoff Автор вопроса
Android dev at Freelance
В общем, приблизительно так:
private void changeRingtone(boolean isRingtone, boolean isNotification) {
         File ringtoneFile = new File(dir, newRing);

        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, ringtoneFile.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, ringtoneFile.getName());
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
        values.put(MediaStore.Audio.Media.ARTIST, " ");
        values.put(MediaStore.MediaColumns.SIZE, ringtoneFile.getUsableSpace());
        values.put(MediaStore.Audio.Media.IS_RINGTONE, isRingtone);
        values.put(MediaStore.Audio.Media.IS_NOTIFICATION, isNotification);
        values.put(MediaStore.Audio.Media.IS_ALARM, false);
        values.put(MediaStore.Audio.Media.IS_MUSIC, false);

        Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringtoneFile
                .getAbsolutePath());
        mContext.getContentResolver().delete(
                uri,
                MediaStore.MediaColumns.DATA + "=\""
                        + ringtoneFile.getAbsolutePath() + "\"", null);
        Uri newUri = mContext.getContentResolver().insert(uri, values);
        try {
            if (isRingtone) {
                RingtoneManager.setActualDefaultRingtoneUri(mContext, RingtoneManager.TYPE_RINGTONE, newUri);
            }
            if (isNotification) {
                RingtoneManager.setActualDefaultRingtoneUri(mContext, RingtoneManager.TYPE_NOTIFICATION, newUri);
            }
        } catch (Throwable t) {
            System.err.println("Can't set ringtone");
            t.printStackTrace();
        }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы