Ich möchte, dass eine Taste einen Piepton abspielt, um anzuzeigen, dass sie gedrückt wurde. Ich möchte wissen, wie ich den standardmäßigen Android-Piepton verwenden kann (z. B. wenn Sie die Klingellautstärke anpassen), anstatt meine eigene MP3-Musikdatei zu importieren oder ToneGenerator zu verwenden?
Wie greife ich auf den Standard-Piepton von Android zu?
Benutzer812892
… verwenden Sie den Standard-Android-Piepton (wie wenn Sie die Klingeltonlautstärke einstellen) …
Auf meinem Cyanogen 7 Nexus One und meinem alten T-Mobile Pulse Mini (letzteres aus dem Gedächtnis) ist dies, soweit ich hören kann, genau der Standard-Piepton bei Lautstärkeänderung:
final ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100);
tg.startTone(ToneGenerator.TONE_PROP_BEEP);
Sie scheinen nach einer Alternative zu fragen ToneGenerator
aber ich denke, es gibt Ihnen genau das, was Sie in zwei Zeilen wollen.
Hier sind einige andere wahrscheinlich ToneGenerator
Sounds, die ich ausprobiert habe und die nicht zusammenpassten (die ersten beiden könnten als Alternative zum Lautstärke-Piep nützlich sein):
// Double beeps: tg.startTone(ToneGenerator.TONE_PROP_ACK);
// Double beeps: tg.startTone(ToneGenerator.TONE_PROP_BEEP2);
// Sounds all wrong: tg.startTone(ToneGenerator.TONE_CDMA_KEYPAD_VOLUME_KEY_LITE);
-
Am besten verwenden Sie einen kontinuierlichen Ton wie die von ToneGenerator.TONE_DTMF_0 bis ToneGenerator.TONE_DTMF_S, da sonst der Piepton unterbrochen und basierend auf der ausgewählten Tonbeschreibung erneut gestartet wird. Dies geschieht, wenn Ihre DauerMs (als Parameter in StartTone (int ToneType, Int DauerMs) übergeben) größer als die Dauer des Gesamttons ist.
– Ungalcye
10. Februar 2015 um 15:13 Uhr
-
Hallo @ungalcrys, ich bin im Moment nicht in der Lage, dies einfach zu überprüfen, aber der Fragesteller hat nach “Standard-Android-Piepton (wie wenn Sie die Klingeltonlautstärke einstellen)” gefragt. Als ich getestet habe, war das genau das, was ich oben angegeben habe:
ToneGenerator.TONE_PROP_BEEP
.– ahcox
10. Februar 2015 um 16:17 Uhr
-
Hatte jemand Probleme mit dem S6 Edge? Der ToneGenerator funktioniert im S6 einwandfrei, aber der S6 Edge gibt mir nichts.
– GR-Gesandter
12. Juni 2015 um 17:53 Uhr
-
@GREnvoy Hallo, das ist interessant. Ich denke, es sollte jedoch eine eigene Frage sein. Oder noch besser, eine Supportanfrage an Samsung.
– ahcox
12. Juni 2015 um 18:37 Uhr
Mohammed Ersan
public void playSound(Context context) throws IllegalArgumentException,
SecurityException,
IllegalStateException,
IOException {
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
MediaPlayer mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(context, soundUri);
final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
// Uncomment the following line if you aim to play it repeatedly
// mMediaPlayer.setLooping(true);
mMediaPlayer.prepare();
mMediaPlayer.start();
}
}
Ich habe eine andere Antwort gefunden:
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
} catch (Exception e) {
e.printStackTrace();
}
Gutschrift geht an https://stackoverflow.com/a/9622040/737925
-
Ich habe diesen Code verwendet und mich geärgert, dass sich der Ton wiederholte. Jetzt sehe ich das Problem:
mMediaPlayer.setLooping(true);
Warum willst du, dass dieser Sound loopt?– Simon Forsberg
25. April 2012 um 15:25 Uhr
-
@SimonAndréForsberg hängt vom Wunsch des Entwicklers ab
– Mohammad Ersan
26. April 2012 um 21:01 Uhr
-
Spielt es eine Rolle, dass mMediaPlayer den Gültigkeitsbereich verlässt und für die Garbage-Collection verfügbar ist, bevor die Wiedergabe des Sounds beendet ist, oder wird der Sound bereits an Komponenten auf niedrigerer Ebene weitergeleitet, die sicherstellen, dass die Wiedergabe von beendet wird
mMediaPlayer.start()
Anruf?– ahcox
2. Mai 2012 um 13:25 Uhr
-
Beachten Sie, dass dieser Code den Tonpegel für den Alarmstrom überprüft und darauf spielt. Für den Fall des Posters möchten Sie tauschen
AudioManager.STREAM_AlARM
Instanzen fürAudioManager.STREAM_NOTIFICATION
. SehenAudioManager
docs für andere Optionen, aber eine Benachrichtigung scheint hier die richtige Wahl zu sein.– ahcox
2. Mai 2012 um 13:49 Uhr
-
Für mich,
RingtoneManager.TYPE_NOTIFICATION
spielt den langen polyphonen „Neue SMS eingetroffen“-Ton. Ich sehe keine Option, mit der das OP seine Standardlautstärke geändert bekommt.– ahcox
2. Mai 2012 um 14:45 Uhr
Sie können über die ToneGenerator-Klasse auf den Standard-Beeb-Sound von Android zugreifen.
import android.media.AudioManager;
import android.media.ToneGenerator;
ToneGenerator toneGenerator = new ToneGenerator(AudioManager.STREAM_MUSIC, 200);
toneGenerator.startTone(ToneGenerator.TONE_CDMA_EMERGENCY_RINGBACK);
Weitere Informationen zum Klang: https://developer.android.com/reference/android/media/ToneGenerator und
https://www.youtube.com/watch?v=HVu7K9W1_BM
-
Genial, danke. Für einen Moment dachte ich, ich müsste 3498734 Codezeilen schreiben, damit die App piept.
– Pookie
27. Juli 2020 um 22:47 Uhr
Der einfache Weg ist die Verwendung einer Instanz der ToneGenerator-Klasse:
//declaration
ToneGenerator toneG;
//using any where`
if(val>=taux_max)
{
taux_text.setTextColor(warnning_col);
toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); //200 is duration in ms
}