Je suis en train de mettre en place une application permettant d'obtenir des informations sur les morceaux de musique en cours.
J'utilise le code suivant pour obtenir ce résultat :
public class CurrentMusicTrackInfoActivity extends Activity {
public static final String SERVICECMD = "com.android.music.musicservicecommand";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentFilter iF = new IntentFilter();
iF.addAction("com.android.music.metachanged");
iF.addAction("com.android.music.playstatechanged");
iF.addAction("com.android.music.playbackcomplete");
iF.addAction("com.android.music.queuechanged");
registerReceiver(mReceiver, iF);
}
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
String cmd = intent.getStringExtra("command");
Log.v("tag ", action + " / " + cmd);
String artist = intent.getStringExtra("artist");
String album = intent.getStringExtra("album");
String track = intent.getStringExtra("track");
Log.v("tag", artist + ":" + album + ":" + track);
Toast.makeText(CurrentMusicTrackInfoActivity.this, track, Toast.LENGTH_SHORT).show();
}
};
}
Cela fonctionne bien pour certains mobiles seulement. Je souhaite implémenter un code permettant d'obtenir des informations sur la piste musicale actuelle sur tous les appareils Android (par exemple, les appareils HTC et Samsung).
Y a-t-il un moyen de le faire ?
1 votes
J'ai un problème avec cela sur ICS. Je suis en train de créer un widget de lecteur multimédia pour ICS. Dès que je lance mon premier widget et qu'il y a de la musique en cours de lecture dans le lecteur natif, je reçois une intention métachangée avec les détails corrects de la chanson et quelques millisecondes plus tard, je reçois une intention de changement d'état de lecture, avec un autre nom de chanson. Une idée pour résoudre ce problème ?
0 votes
Fournir un échantillon pour obtenir les détails de la chanson jouée correctement
0 votes
Désolé, mais je n'ai pas compris Kiran, j'utilise le même code que vous avez mentionné ci-dessus. Mon onReceive est appelé deux fois, une fois pour com.Android.music.metachanged et immédiatement pour com.Android.music.playstatechanged, mais la piste que je reçois des deux intents est différente. MetaChanged donne le nom correct, mais Playstate change donne un nom différent. Cela ne se produit que lors du lancement initial. Comment puis-je contourner le Playstate change pour le premier lancement ?
0 votes
Si j'ai un lecteur de musique tiers et que je joue une chanson à partir de ce lecteur, est-ce que j'obtiens ces intentions comme des méta-modifications ?
0 votes
@kiran, avez-vous envisagé la possibilité que, puisque les appareils semblent le gérer différemment, vous devrez vérifier le type d'appareil et mettre en œuvre une méthode différente en fonction de l'appareil qu'ils utilisent ? Sur quel type d'appareil cela fonctionne-t-il ?