131 votes

Comment jouer à la sonnerie / alarme dans Android

J'ai cherche partout comment jouer une sonnerie/alarme sonore dans Android.

J'appuie sur un bouton et je veux jouer une sonnerie/alarme sonore. Je ne pouvais pas trouver un moyen facile, simple échantillon. Oui, je l'ai déjà regardé Réveil code source... mais il n'est pas simple et je ne peut pas compiler.

Je ne peux pas faire ce travail:

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();
}

J'obtiens cette erreur:

04-11 17:15:27.638: ERROR/MediaPlayerService(30): Couldn't open fd for
content://settings/system/ringtone

Donc.. s'il vous plaît si quelqu'un sait comment jouer une sonnerie par défaut/alarme laissez-moi savoir.

Je préfère ne pas télécharger n'importe quel fichier. Suffit de jouer une sonnerie par défaut.

202voto

markov00 Points 1664

Vous pouvez simplement jouer une sonnerie définie avec ceci:

 Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
 

67voto

Blundell Points 28342

Si un utilisateur n'a jamais défini d'alarme sur son téléphone, le TYPE_ALARM peut renvoyer null. Vous pouvez en rendre compte avec:

 Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);

if(alert == null){
    // alert is null, using backup
    alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    // I can't see this ever being null (as always have a default notification)
    // but just incase
    if(alert == null) {  
        // alert backup is null, using 2nd backup
        alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);                
    }
}
 

65voto

igordcard Points 559

C'est comme ça que j'ai fait:

 Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), notification);
mp.start();
 

Il ressemble à Markov00, mais utilise MediaPlayer à la place de Ringtone, qui empêche d’interrompre d’autres sons, tels que la musique, qui sont peut-être déjà lus en arrière-plan.

17voto

synic Points 12644

Votre exemple est fondamentalement ce que j'utilise. Toutefois, cela ne fonctionne jamais sur l'émulateur, car celui-ci ne possède pas de sonneries par défaut et content://settings/system/ringtone ne résout rien en lecture. Cela fonctionne bien sur mon téléphone actuel.

9voto

OcuS Points 3633

Vous pouvez insérer un fichier MP3 dans votre dossier / sdcard à l'aide de DDMS, redémarrer l'émulateur, puis ouvrir l'application Multimédia, rechercher votre fichier MP3, appuyer longuement dessus et sélectionner "Utiliser comme sonnerie du téléphone".

L'erreur est partie!

Edit: même problème avec les sons de notification (par exemple pour les SMS) résolu en utilisant l'application Ringdroid

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X