Ich habe überall gesucht, wie man einen Klingelton / Alarmton in Android abspielt.
Ich drücke eine Taste und möchte einen Klingelton / Alarmton abspielen. Ich konnte keine einfache und unkomplizierte Probe finden. Ja, ich habe mir bereits den Wecker-Quellcode angesehen ... aber es ist nicht einfach und ich kann ihn nicht kompilieren.
Ich kann diese Arbeit nicht machen:
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();
}
Ich erhalte diesen Fehler:
04-11 17:15:27.638: ERROR/MediaPlayerService(30): Couldn't open fd for
content://settings/system/ringtone
Also .. bitte, wenn jemand weiß, wie man einen Standard-Klingelton / Alarm spielt, lass es mich wissen.
Ich ziehe es vor, keine Datei hochzuladen. Spielen Sie einfach einen Standardklingelton ab.
android
android-emulator
Federico
quelle
quelle
Wenn ein Benutzer noch nie einen Alarm auf seinem Telefon eingestellt hat, kann TYPE_ALARM null zurückgeben. Sie können dies erklären mit:
quelle
null
obwohl er nicht auf einen gültigen Sound verweist. Sie sollten den Rückgabewert vonRingtoneManager.getRingtone()
fürnull
stattdessen / auchSo habe ich es gemacht:
Es ähnelt der Methode von markov00, verwendet jedoch MediaPlayer anstelle von Ringtone, wodurch verhindert wird, dass andere Sounds wie Musik unterbrochen werden, die möglicherweise bereits im Hintergrund abgespielt werden.
quelle
Ihr Beispiel ist im Grunde das, was ich benutze. Es funktioniert jedoch nie auf dem Emulator, da der Emulator standardmäßig keine Klingeltöne hat und
content://settings/system/ringtone
sich nicht in etwas Spielbares auflöst. Es funktioniert gut auf meinem tatsächlichen Telefon.quelle
Das funktioniert gut:
quelle
Für die zukünftigen Googler: Verwenden Sie
RingtoneManager.getActualDefaultRingtoneUri()
anstelle vonRingtoneManager.getDefaultUri()
. Entsprechend seinem Namen würde es den tatsächlichen Uri zurückgeben, so dass Sie ihn frei verwenden können. Aus der Dokumentation vongetActualDefaultRingtoneUri()
:In der Zwischenzeit
getDefaultUri()
sagt dies:quelle
Sie können eine MP3-Datei mit DDMS in Ihren Ordner / sdcard verschieben, den Emulator neu starten, dann die Medienanwendung öffnen, zu Ihrer MP3-Datei navigieren, lange darauf drücken und "Als Telefonklingelton verwenden" auswählen.
Fehler ist weg!
Bearbeiten: Das gleiche Problem mit Benachrichtigungstönen (z. B. für SMS) wurde mit der Ringdroid-Anwendung behoben
quelle
quelle
AlarmService
kommen aus?Das Kopieren einer Audiodatei auf die SD-Karte des Emulators und das Auswählen über den Media Player als Standardklingelton löst das Problem tatsächlich.
quelle
Sie können diesen Beispielcode verwenden:
quelle
Hier ist ein Beispielcode:
quelle
mediaPlayer
anstelle vonmp
.