45 votes

Comment définir une sonnerie dans Android à partir de mon activité?

J'essaie de trouver un moyen de définir une nouvelle sonnerie par défaut à partir de mon activité Android.

J'ai déjà téléchargé la sonnerie dans un bytearray.

Quelqu'un a un indice?

72voto

Vidar Vestnes Points 14317

Enfin, j'ai réussi à définir la sonnerie par défaut à celui que j'ai téléchargé. Le code de téléchargement n'est pas inclus ci-dessous, seulement ce qui était nécessaire pour la définir comme sonnerie par défaut.

File k = new File(path, "mysong.mp3"); // path is a file to /sdcard/media/ringtone

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "My Song title");
values.put(MediaStore.MediaColumns.SIZE, 215454);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.Audio.Media.ARTIST, "Madonna");
values.put(MediaStore.Audio.Media.DURATION, 230);
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);

//Insert it into the database
Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
Uri newUri = main.getContentResolver().insert(uri, values);

RingtoneManager.setActualDefaultRingtoneUri(
  myActivity,
  RingtoneManager.TYPE_RINGTONE,
  newUri
);

De toute façon, je ne comprends totalement ce que ce code est en train de faire.

La Sonnerie manager a besoin d'un uri du fichier à définir comme sonnerie. Mais cette uri ne peut pas être directement sur la carte sd comme "/sdcard/media/sonneries/ma chanson.mp3". Cela ne fonctionne pas!

Ce que vous avez besoin est un fichier externe uri du fichier qui pourrait être quelque chose comme "/externe/audio/media/46"

Le 46 est l'id de la colonne dans la MediaStore base de données, donc c'est pourquoi vous avez besoin d'ajouter la carte sd le fichier dans la base de données en premier.

De toute façon, comment ne mediastore maintenir son id? Ce nombre peut être très élevé, comme vous le faites cette opération plusieurs fois.

Dois-je supprimer cette ligne de mon auto? Le problème, c'est que certaines fois je n'ai pas encore commander la suppression du fichier, car il peut être supprimé directement à partir de la carte sd avec un filebrowser.

3voto

Vidar Vestnes Points 14317

Je n'ai toujours pas trouvé la solution. J'essaie avec ce code, mais ça ne marche pas. Mais il joue le fichier.

 Uri ringtoneUri = Uri.parse("/sdcard/media/audio/ringtones/myringtone.mp3");
rm.setActualDefaultRingtoneUri(main, rm.TYPE_RINGTONE, ringtoneUri);
Ringtone rt = rm.getRingtone(main,ringtoneUri);
rt.play();
 

Ce code commence seulement à jouer la sonnerie, donc rt.play () fonctionne. Mais setActualDefaultRingtoneUri () ne le fait pas. Aucune exception ou avertissement dans le DDM.

2voto

CommonsWare Points 402670

2voto

russoue Points 113

Vous pouvez utiliser la classe intégrée RingtonePreference . AndroidGuys a un bon tutoriel à ce sujet ici .

-1voto

Andres Yajamin Points 17

J'ai trouvé ce code à partir de l'application multimédia d'Android.

 Settings.System.putString(resolver, 
Settings.System.RINGTONE, ringUri.toString());
 

cela fonctionne forme mon.

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