J'ai un service, qui utilise MediaSession
pour la lecture des flux. Je veux collecter le temps, combien ce service joue de la musique et ensuite l'envoyer au serveur. J'utilise le code suivant (simplifié) :
public class MyService extends MediaBrowserServiceCompat {
private Long startTime;
public class MediaPlayerListener extends PlaybackInfoListener {
@Override
public void onPlaybackStateChange(PlaybackStateCompat state) {
session.setPlaybackState(state);
switch (state.getState()) {
case PlaybackStateCompat.STATE_PLAYING:
startTime = SystemClock.elapsedRealtime();
startForeground(MediaNotificationManager.NOTIFICATION_ID, notification);
break;
case PlaybackStateCompat.STATE_STOPPED:
long timediff = SystemClock.elapsedRealtime() - startTime;
stopForeground(true);
stopSelf();
// timediff is being sent to the server here
break;
}
}
}
Le service fonctionne comme prévu, mais pas les rapports de temps. Sur le serveur, certains des temps d'écoute sont corrects, mais certains sont très élevés, plus de 200 heures. Comme ce service est utilisé pour écouter des flux, il n'est pas possible ou réaliste de calculer une telle valeur. Je suis donc convaincu que ce rapport n'est pas bon. J'ai également essayé de remplacer SystemClock
con System#currentTimeMillis
mais les valeurs sont également très importantes. Quelqu'un pourrait-il me dire comment mesurer correctement le temps d'écoute ou me fournir quelques bonnes pratiques ?