2012-05-24 2 views
1

Я пытаюсь настроить 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) {} 

} 

ответ

3

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

getContentResolver().delete(uri, MediaStore.MediaColumns.DATA 
+ "=\"" + file.getAbsolutePath() + "\"", null); 
Смежные вопросы