Возможный дубликат:
Как очистить Mediastore перед установка рингтона
В моем приложении для Android есть набор из примерно 130 mp3 разных звуковых клипов. Они перечислены в списке, и когда пользователь долго нажимает на один из них, он дает ему возможность установить его в качестве мелодии звонка или уведомления по умолчанию. По большей части у меня это работает для рингтона, но это немного непоследовательно.
Например, он может установить мелодию звонка по умолчанию в первый раз, но в следующий раз, когда я попытаюсь установить другой клип в качестве мелодии звонка по умолчанию, а затем зайду в свои списки мелодий, будет выбрано «Без звука». Кроме того, я заметил, что во время моего тестирования приложение создало 3-4 варианта в моем списке мелодий, у которых нет соответствующего файла, и я понятия не имею, как их удалить.
Я не очень опытный разработчик Android, поэтому я не могу понять, что я здесь делаю неправильно. Вот код для моего setRingtone() с переданным ресурсом:
public void playSound(int input){
byte[] buffer=null;
InputStream fIn = getBaseContext().getResources().openRawResource(input);
int size=0;
try {
size = fIn.available();
buffer = new byte[size];
fIn.read(buffer);
fIn.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
String path="/sdcard/sounds/";
String filename="my_ringtone"+".mp3";
boolean exists = (new File(path)).exists();
if (!exists){new File(path).mkdirs();}
FileOutputStream save;
try {
save = new FileOutputStream(path+filename);
save.write(buffer);
save.flush();
save.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename)));
File k = new File(path, filename);
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "MyRingtone");
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.Audio.Media.ARTIST, "cssounds ");
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
//Insert it into the database
Uri newUri= this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values);
RingtoneManager.setActualDefaultRingtoneUri(
this,
RingtoneManager.TYPE_RINGTONE,
newUri
);
}