簡體   English   中英

如何顯示歌曲持續時間

[英]How to display Song Duration

所以我使用Mediastore獲取歌曲持續時間但我需要將它們轉換為秒我需要將它們格式化為HH:MM:SS(小時:分鍾:秒)我嘗試使用TimeUnit但是沒有工作或者我沒有實現它正確方式

謝謝你的幫助對不起英語不好

請幫忙。 SongAdapter.java

@Override
public void bindView(View view, Context context, Cursor cursor) {




    TextView title1 = (TextView) view.findViewById(R.id.titlelist);
    TextView artist1 = (TextView) view.findViewById(R.id.artistlist);
    TextView duration1 = (TextView) view.findViewById(R.id.durationlist);
    ImageView album1 = (ImageView) view.findViewById(R.id.iconlist);

     title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
    String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
    String duration = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
    String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
    long albumId = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));
      StringBuilder titleBuild = new StringBuilder();

      titleBuild.append(title);

      if(titleBuild.length() > 35)
      {
      titleBuild.setLength(32);
      title = titleBuild.toString()+"...";
      }
      else
      {
          title = titleBuild.toString();
      }
      StringBuilder artistBuild = new StringBuilder();
      artistBuild.append(artist);
      if(artistBuild.length() > 35)
      {
      artistBuild.setLength(32);
      artist = artistBuild.toString()+"...";
      }
      else
      {
      artist = artistBuild.toString();
      }

      final Uri ART_CONTENT_URI = Uri.parse("content://media/external/audio/albumart");
        Uri albumArtUri = ContentUris.withAppendedId(ART_CONTENT_URI, albumId);

        if(albumArtUri == null){

            Picasso.with(context).load(R.drawable.default_artwork)
            .resize(300, 300).centerInside().into(album1);

        }


          Picasso.with(context).load(albumArtUri)
          .resize(300, 300).centerInside().into(album1);



duration1.setText(duration);          
title1.setText(title);
artist1.setText(artist);
}

一旦你有了持續時間,

稱這個例程(但我相信有更優雅的方式)。

public String convertDuration(long duration) {
    String out = null;
    long hours=0;
    try {
        hours = (duration / 3600000);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return out;
    }
    long remaining_minutes = (duration - (hours * 3600000)) / 60000;
    String minutes = String.valueOf(remaining_minutes);
    if (minutes.equals(0)) {
        minutes = "00";
    }
    long remaining_seconds = (duration - (hours * 3600000) - (remaining_minutes * 60000));
    String seconds = String.valueOf(remaining_seconds);
    if (seconds.length() < 2) {
        seconds = "00";
    } else {
        seconds = seconds.substring(0, 2);
    }

    if (hours > 0) {
        out = hours + ":" + minutes + ":" + seconds;
    } else {
        out = minutes + ":" + seconds;
    }

    return out;

}

Theo的答案非常好,它決定了在兩種狀態下顯示時間:

如果小時不大於0,則僅顯示分鍾和秒。

這是一個非常整潔的方法,但正如他所提到的,它不是很優雅。

您可以使用以下方法簡化操作:

//convert the song duration into string reading hours, mins seconds
int dur = (int) song.get(position).getDuration();

int hrs = (dur / 3600000);
int mns = (dur / 60000) % 60000;
int scs = dur % 60000 / 1000;

String songTime = String.format("%02d:%02d:%02d", hrs,  mns, scs);

你應該知道三件事:

  1. 持續時間以毫秒為單位存儲; 1000毫秒= 1秒
  2. 使用%來獲得總和的余數,即60,000符合dur值的次數是多少?
  3. 使用除以1000得到scs是以秒為單位得到絕對值,而不是毫秒。

如果你不想使用它,也許你更喜歡使用:

//convert the song duration into string reading hours, mins seconds
int dur = (int) song.get(position).getDuration();

int hrs = (dur / 3600000);
int mns = (dur / 60000) % 60000;
int scs = dur % 60000;

NumberFormat formatter = new DecimalFormat("00");
String seconds = formatter.format(scs);

String songTime = String.format("%02d:%02d", hrs,  mns);
String output = songTime + ":" + seconds;

根據我的理解,Java不喜歡Milliseconds不到3位數,因為它很小,因此不能使用%02d友好地顯示,這就是我將scs除以1000的原因。使用Numberformatter強制格式化數字值只能分配,在這種情況下為00

MediaPlayerMediaStore Class獲取時間

設置文本如下(在Kotlin中)(在Java中使用setText)

songTimeFav?.text = String.format("%d:%d",
                TimeUnit.MILLISECONDS.toMinutes(finalTime?.toLong() as Long),
                TimeUnit.MILLISECONDS.toSeconds(finalTime?.toLong() as Long) -
                        TimeUnit.MINUTES.toSeconds(
                                TimeUnit.MILLISECONDS.toMinutes(finalTime.toLong())))

songTimeFav是TextView的對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM