У меня небольшая проблема с моим приложением для Android. У меня есть некоторые mp3-файлы в моем приложении, которые я хочу установить в качестве мелодии звонка по умолчанию или уведомления. Я следовал инструкциям на этом посту Setting Ringtone in Android и это вроде как работы.Набор мелодий для Android установлен только в первый раз
вот мой код:
Создание файла для установки в качестве мелодии звонка:
public static String createFile(String raw, int choice){
File newSoundFile = null;
String path = (choice == 0) ? "/mnt/sdcard/media/mySoundsRingtone.mp3" : "/mnt/sdcard/media/mySoundsNotification.mp3";
newSoundFile = new File(path);
if(newSoundFile.exists()){
try {
newSoundFile.delete();
} catch (Exception e) {
Toast.makeText(cont, "delete failed", Toast.LENGTH_SHORT).show();
return null;
}
}
try {
newSoundFile.createNewFile();
} catch (IOException e) {
Toast.makeText(cont, "file creation failed", Toast.LENGTH_SHORT).show();
return null;
}
//Toast.makeText(cont, "file created", Toast.LENGTH_SHORT).show();
Uri mUri = Uri.parse("android.resource://my.package.name/"+raw);
ContentResolver mCr = cont.getContentResolver();
AssetFileDescriptor soundFile;
try {
soundFile= mCr.openAssetFileDescriptor(mUri, "r");
} catch (FileNotFoundException e) {
Toast.makeText(cont, "AssetFileDescriptor failed", Toast.LENGTH_SHORT).show();
soundFile=null;
return null;
}
try {
byte[] readData = new byte[1024];
FileInputStream fis = soundFile.createInputStream();
FileOutputStream fos = new FileOutputStream(newSoundFile);
int i = fis.read(readData);
while (i != -1) {
fos.write(readData, 0, i);
i = fis.read(readData);
}
fos.close();
} catch (Exception io) {
Toast.makeText(cont, "copy failed", Toast.LENGTH_SHORT).show();
return null;
}
return path;
}
Установка файла в качестве мелодии звонка:
Вызов как:
public static void setRingTone(String raw, int choice){
setValues(createFile(raw, choice), choice);
}
, так что происходит : в первый раз, когда я выбираю мелодию для создания нового файла, и звук правильно назначается в качестве мелодии звонка. Если я снова нажму, чтобы выбрать мелодию звонка, старый файл рингтона будет удален и воссоздан должным образом, но он не будет установлен в качестве мелодии звонка (когда я позвоню, я получаю только вибрацию). НО, если я удалю файл .mp3 вручную и перейду в свое приложение и выберем рингтон снова, он будет работать. Почему он ведет себя по-другому, когда я удаляю файл из своего кода, чем когда он удаляется вручную из файлового браузера?
Любые идеи в чем проблема?
Заранее благодарен!
возможно дубликат [Настройка Мелодии в Android] (http://stackoverflow.com/questions/1986756/setting-ringtone-in-android) – sshashank124