Chciałbym, aby przycisk odtwarzał dźwięk, sygnalizując, że został naciśnięty. Chcę wiedzieć, jak używać domyślnego dźwięku sygnalizatora dźwiękowego Android (jak przy regulacji głośności dzwonka) zamiast importować własny plik muzyczny MP3 lub ToneGenerator?Jak uzyskać dostęp do domyślnego sygnału dźwiękowego Androida?
Odpowiedz
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);
mMediaPlayer.setLooping(true);
mMediaPlayer.prepare();
mMediaPlayer.start();
}
}
znalazłem inną odpowiedź: Przejście
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
} catch (Exception e) {
e.printStackTrace();
}
kredytowej https://stackoverflow.com/a/9622040/737925
... użyć domyślnego android sygnał dźwiękowy (jak podczas regulacji głośności dzwonka) ..
Na moim Cyanogen 7 Nexus One i moim starym Zdjęcie T-Mobile Pulse Mini (ten ostatni z pamięci), tak daleko, jak słyszę, to jest dokładnie to, dźwięk domyślny sygnał na zmiany objętości:
final ToneGenerator tg = new ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100);
tg.startTone(ToneGenerator.TONE_PROP_BEEP);
Wydaje się, że z prośbą o alternatywę do ToneGenerator
, ale myślę, że daje ci dokładnie to, czego chcesz w dwóch liniach.
Oto niektóre inne prawdopodobne ToneGenerator
brzmi próbowałem które nie były mecze (dwa pierwsze mogą być użyteczne jako zastępców sygnale objętość):
// 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);
Najlepiej byłoby użyć ciągłego dźwięku, takiego jak te z ToneGenerator.TONE_DTMF_0 do ToneGenerator.TONE_DTMF_S, albo dźwięk sygnału dźwiękowego przerwie i rozpocznie się ponownie w oparciu o wybrany opis brzmienia. Stanie się tak, jeśli długość durationMs (przekazywana jako parametr w tonacji startTone (int tonType, int durationMs) jest większa niż czas trwania całego sygnału dźwiękowego – ungalcrys
Hi @ungalcrys, nie jestem w stanie ponownie sprawdzić tego w tej chwili, ale pytający poprosił o "domyślny sygnał dźwiękowy Android (jak przy regulacji głośności dzwonka)". Kiedy testowałem, to był dokładnie ten, który podaję powyżej: 'ToneGenerator.TONE_PROP_BEEP'. – ahcox
Ktoś miał jakieś problemy z S6 Edge? ToneGenerator działa dobrze w S6, ale S6 Edge nic mi nie daje –
łatwym sposobem jest użycie instancji moduł brzmieniowy Classe :
//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
}
Użyłem tego kodu i denerwowało mnie, że dźwięk powtórzył się. Teraz widzę problem: 'mMediaPlayer.setLooping (true);' Dlaczego miałbyś chcieć, aby ten dźwięk był w pętli? –
@ SimonAndréForsberg zależy od pożądania programisty. –
Czy to ważne, że mMediaPlayer wykracza poza zakres i jest dostępny do zebrania śmieci przed zakończeniem odtwarzania dźwięku, lub czy dźwięk jest już przekazywany do komponentów niższego poziomu, które zapewnią jego zakończenie przez wywołanie 'mMediaPlayer.start()'? – ahcox