2015-03-13 38 views

回答

2

我相信这是

Uri mediaPath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.your_song); 
    MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
    mmr.setDataSource(this, mediaPath); 

然后,接入/保存

String song_duration =mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 

注意,然而,这将返回以毫秒为单位的持续时间的信息,让我相信你可以做到以下几点::

你要找的是什么
Integer.parseInt(song_duration); 
    song_duration = song_duration/1000; 
    String song_dur_str = "song_duration/60" +":" +"song_duration%60" + "sec" 
+0

其实这不起作用。而且,也许我错了,但这仅适用于1首歌曲,并非原始文件夹中的所有文件。 Ps。抱歉,迟到的回应,我以为我已经回复了你的帖子。 – 2015-03-18 13:07:57

0

我还没有测试此代码...希望这会给你的想法

 private String[][] getAllRawResources() { 
      String[][] ids = null ; 
      R.raw r = new R.raw() ; 

      Field fields[] = R.raw.class.getDeclaredFields() ; 
      ids = new String[fields.length][3] ; 

      try { 
     for(int i=0; i<fields.length; i++) { 
      Field f = fields[i] ; 
      ids[i][0] = f.getInt(r) ; 
      ids[i][1] = f.getName(); 
      Log.i(TAG, "R.raw."+f.getName()+" = 0x"+Integer.toHexString(ids[i])) ; 

    Uri mediaPath = Uri.parse(f.getPath()); 
     MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
     mmr.setDataSource(this, mediaPath); 
     String song_duration =mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 

Integer.parseInt(song_duration); 
    song_duration = song_duration/1000; 
    String song_dur_str = "song_duration/60" +":" +"song_duration%60" 
     id[i][2] = song_duration; 

      } 
      } catch (IllegalArgumentException e) { 
      // TODO Auto-generated catch block 
     e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      } 

      return ids ; 
     } 
+0

它确实给了我一个主意,但它没有奏效。你写的代码有一些我不知道如何解决的错误。 – 2015-03-18 13:11:10

相关问题