J'ai cherché partout comment jouer une sonnerie / un son d'alarme dans Android.
J'appuie sur un bouton et je veux jouer une sonnerie / un son d'alarme. Je n'ai pas pu trouver un échantillon simple et direct. Oui, j'ai déjà regardé le code source du réveil ... mais ce n'est pas simple et je ne peux pas le 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
Alors ... s'il vous plaît, si quelqu'un sait comment jouer une sonnerie / alarme par défaut, faites-le moi savoir.
Je préfère ne télécharger aucun fichier. Jouez simplement une sonnerie par défaut.
android
android-emulator
Federico
la source
la source
Si un utilisateur n'a jamais défini d'alarme sur son téléphone, TYPE_ALARM peut renvoyer null. Vous pouvez en rendre compte avec:
la source
null
même s'il ne pointe pas vers un son valide. Vous devriez tester la valeur de retour deRingtoneManager.getRingtone()
for à lanull
place / aussi bienC'est comme ça que j'ai fait:
Il est similaire à la manière de markov00, mais utilise MediaPlayer au lieu de Ringtone qui empêche d'interrompre d'autres sons, comme la musique, qui pourraient déjà être lus en arrière-plan.
la source
Votre exemple est essentiellement ce que j'utilise. Cela ne fonctionne jamais sur l'émulateur, cependant, car l'émulateur n'a pas de sonneries par défaut et
content://settings/system/ringtone
ne résout rien de jouable. Cela fonctionne bien sur mon téléphone réel.la source
Cela fonctionne bien:
la source
Pour les futurs googleurs: utilisez
RingtoneManager.getActualDefaultRingtoneUri()
plutôt queRingtoneManager.getDefaultUri()
. Selon son nom, il renverrait l'URI réel, vous pouvez donc l'utiliser librement. De la documentation degetActualDefaultRingtoneUri()
:Pendant
getDefaultUri()
ce temps dit ceci:la source
Vous pouvez pousser un fichier MP3 dans votre dossier / sdcard en utilisant DDMS, redémarrer l'émulateur, puis ouvrir l'application Média, parcourir votre fichier MP3, appuyer longuement dessus et sélectionner "Utiliser comme sonnerie de téléphone".
L'erreur est partie!
Edit: même problème avec les sons de notification (par exemple pour les SMS) résolus à l'aide de l'application Ringdroid
la source
la source
AlarmService
vient-il?Copier un fichier audio sur la carte SD de l'émulateur et le sélectionner via le lecteur multimédia comme sonnerie par défaut résout en effet le problème.
la source
Vous pouvez utiliser cet exemple de code:
la source
Il est peut-être tard mais il existe une nouvelle solution simple à cette question pour qui en a envie.
À Kotlin
Le code ci-dessus jouera la sonnerie par défaut, mais si vous voulez une alarme par défaut, changez
à
la source
Voici un exemple de code:
la source
mediaPlayer
au lieu demp
.