Szukałem wszędzie, jak odtworzyć dźwięk dzwonka / alarmu w Androidzie.
Naciskam przycisk i chcę odtworzyć dzwonek / dźwięk alarmu. Nie mogłem znaleźć łatwej, prostej próbki. Tak, sprawdziłem już kod źródłowy budzika ... ale nie jest to proste i nie mogę go skompilować.
Nie mogę tego zrobić:
Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(this, alert);
final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
player.setAudioStreamType(AudioManager.STREAM_ALARM);
player.setLooping(true);
player.prepare();
player.start();
}
Otrzymuję ten błąd:
04-11 17:15:27.638: ERROR/MediaPlayerService(30): Couldn't open fd for
content://settings/system/ringtone
Więc .. proszę, jeśli ktoś wie, jak odtworzyć domyślny dzwonek / alarm, daj mi znać.
Wolę nie przesyłać żadnych plików. Po prostu odtwórz domyślny dzwonek.
android
android-emulator
Federico
źródło
źródło
Jeśli użytkownik nigdy nie ustawił alarmu w swoim telefonie, TYPE_ALARM może zwrócić wartość null. Możesz to wyjaśnić:
źródło
null
nawet jeśli nie wskazuje prawidłowego dźwięku. Powinieneś przetestować zwracaną wartośćRingtoneManager.getRingtone()
fornull
zamiast / równieżOto sposób, w jaki zrobiłem:
Jest podobny do sposobu markov00, ale używa MediaPlayer zamiast Ringtone, który zapobiega zakłócaniu innych dźwięków, takich jak muzyka, która może już być odtwarzana w tle.
źródło
Twój przykład jest w zasadzie tym, czego używam. Jednak nigdy nie działa na emulatorze, ponieważ emulator domyślnie nie ma żadnych dzwonków i
content://settings/system/ringtone
nie rozwiązuje się na nic, co można odtworzyć. Działa dobrze na moim telefonie.źródło
To działa dobrze:
źródło
Dla przyszłych pracowników Google: użyj
RingtoneManager.getActualDefaultRingtoneUri()
zamiastRingtoneManager.getDefaultUri()
. Zgodnie z nazwą zwróciłby on rzeczywisty uri, więc możesz go swobodnie używać. Z dokumentacjigetActualDefaultRingtoneUri()
:Tymczasem
getDefaultUri()
mówi tak:źródło
Możesz przesłać plik MP3 do folderu / sdcard za pomocą DDMS, ponownie uruchomić emulator, a następnie otworzyć aplikację Media, przejść do pliku MP3, przytrzymać go i wybrać opcję „Użyj jako dzwonka telefonu”.
Błąd zniknął!
Edycja: ten sam problem z dźwiękami powiadomień (np. SMS) rozwiązany za pomocą aplikacji Ringdroid
źródło
źródło
AlarmService
pochodzi?Skopiowanie pliku audio na kartę SD emulatora i wybranie go przez odtwarzacz multimediów jako domyślny dzwonek rzeczywiście rozwiązuje problem.
źródło
Możesz użyć tego przykładowego kodu:
źródło
Może być późno, ale jest nowe, proste rozwiązanie tego pytania dla każdego, kto kiedykolwiek tego chce.
W Kotlin
Powyższy kod odtworzy domyślny dzwonek, ale jeśli chcesz domyślny alarm, zmień
do
źródło
Oto przykładowy kod:
źródło
mediaPlayer
zamiastmp
.