Проблемы с установкой мелодии на телефон

Я пытаюсь заставить программу Android установить мелодию звонка телефона. Когда я запускаю приведенный ниже код один раз, мелодия звонка устанавливается правильно и работает нормально. Однако, если я запускаю код более одного раза, рингтон становится тихим. Любая помощь в выяснении этого будет чрезвычайно оценена.

    void setRingtone() {
    //File path = Environment.getExternalStorageDirectory();

    //File file = new File(path, "ringtone.mp3"); 


    File file = new File("/sdcard/", "ringtone.mp3");
    Uri mUri = Uri.parse("android.resource://com.*****.*****/" + R.raw.*****);
    ContentResolver mCr = getContentResolver();

    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath());
    values.put(MediaStore.MediaColumns.TITLE, "my ringtone");
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/oog");
    values.put(MediaStore.MediaColumns.SIZE, file.length());
    values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
    values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
    values.put(MediaStore.Audio.Media.IS_ALARM, true);
    values.put(MediaStore.Audio.Media.IS_MUSIC, false);

    Uri uri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath());
    Uri newUri = mCr.insert(uri, values);

    try {
        RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri);
    } catch (Throwable t) {}

}

person AcidofRain    schedule 24.05.2012    source источник


Ответы (1)


Проблема заключалась в том, что RingtoneManager.setActualDefaultRingtoneUri добавляет путь к файлу в базу данных с идентификацией в качестве рингтона. Поскольку путь к файлу уже был в базе данных, возникает какая-то ошибка, и значение становится нулевым (если я правильно понимаю). Именно поэтому он работает только в первый раз после настройки. Чтобы исправить это, вам нужно сначала удалить ссылку. Вот код для этого.

getContentResolver().delete(uri, MediaStore.MediaColumns.DATA 
+ "=\"" + file.getAbsolutePath() + "\"", null);
person AcidofRain    schedule 25.05.2012