Comment jouer sonnerie / son d'alarme dans Android

j'ai cherché partout comment jouer un son de sonnerie/alarme dans Android.

j'appuie sur un bouton et je veux jouer une sonnerie/alarme sonore. Je n'ai pas pu trouver un échantillon facile et simple. Oui, j'ai déjà regardé le code source du réveil... 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();
}

je reçois cette erreur:

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

So.. 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 de fichier. Suffit de jouer une sonnerie par défaut.

104
demandé sur Melquiades 2010-04-11 22:28:45

11 réponses

vous pouvez simplement jouer une sonnerie avec ceci:

Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
165
répondu markov00 2011-12-19 22:17:27

si un utilisateur n'a jamais mis d'alarme sur son téléphone, le bras TYPE_ALARM peut retourner null. Vous pouvez expliquer cela 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);                
    }
}
60
répondu Blundell 2014-02-21 12:25:35

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

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

est similaire à la manière de markov00, mais utilise MediaPlayer au lieu de sonnerie qui empêche d'interrompre d'autres sons, comme la musique, qui pourraient déjà jouer dans l'arrière-plan.

47
répondu igordcard 2013-11-24 17:46:00

votre exemple est essentiellement ce que j'utilise. Il ne fonctionne jamais sur l'émulateur, cependant, parce que l'émulateur n'a pas de sonneries par défaut, et content://settings/system/ringtone ne se résout à rien jouable. Il fonctionne très bien sur mon téléphone.

16
répondu synic 2010-04-11 20:37:52

Cela fonctionne très bien:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
MediaPlayer thePlayer = MediaPlayer.create(getApplicationContext(), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

try {
    thePlayer.setVolume((float) (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) / 7.0)),
                        (float) (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) / 7.0)));
} catch (Exception e) {
    e.printStackTrace();
}

thePlayer.start();
10
répondu Kamran Ahmed 2015-11-18 02:21:09

vous pouvez pousser un fichier MP3 dans votre dossier /sdcard en utilisant DDMS, redémarrer l'émulateur, puis ouvrir L'application multimédia, parcourir votre fichier MP3, appuyez longtemps dessus et sélectionnez"Utiliser comme sonnerie de téléphone".

L'erreur

a disparu!

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

9
répondu OcuS 2010-09-15 17:12:29

pour les futurs googleurs: utilisez RingtoneManager.getActualDefaultRingtoneUri() au lieu de RingtoneManager.getDefaultUri() . Selon son nom, il retournerait l'uri réel, de sorte que vous pouvez librement l'utiliser. D'après la documentation de getActualDefaultRingtoneUri() :

obtient L'Uri du son par défaut courant. Cela donnera le son actuel Uri, au lieu d'utiliser ceci, la plupart des clients peuvent utiliser DEFAULT_RINGTONE_URI.

pendant ce temps getDefaultUri() dit ceci:

renvoie L'Uri pour la sonnerie par défaut d'un type particulier. Plutôt que de retourner L'Uri sonore de la sonnerie réelle, cela retournera le symbolique Uri qui se résoudra au son réel lorsqu'il sera joué.

5
répondu Matvey Rybakov 2017-10-14 06:31:29

copier un fichier audio sur la carte sd de l'émulateur et le sélectionner via media player car la sonnerie par défaut résout effectivement le problème.

2
répondu Valentin Klinghammer 2010-10-05 16:56:58

vous pouvez utiliser ce code d'exemple:

Uri ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
Ringtone ringtoneSound = RingtoneManager.getRingtone(getApplicationContext(), ringtoneUri)

if (ringtoneSound != null) {
    ringtoneSound.play();
}
2
répondu Gio MV 2015-03-31 17:26:49
public class AlarmReceiver extends WakefulBroadcastReceiver {

    @Override
    public void onReceive(final Context context, Intent intent) {
        //this will update the UI with message
        Reminder inst = Reminder.instance();
        inst.setAlarmText("");

        //this will sound the alarm tone
        //this will sound the alarm once, if you wish to
        //raise alarm in loop continuously then use MediaPlayer and setLooping(true)
        Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
        if (alarmUri == null) {
            alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        }
        Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri);
        ringtone.play();

        //this will send a notification message
        ComponentName comp = new ComponentName(context.getPackageName(),
                AlarmService.class.getName());
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}
2
répondu Kumar sunny 2015-04-16 11:03:04

voici un exemple de code:

Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), notification);
mediaPlayer.start();
-2
répondu Nishant 2014-10-22 18:00:27