【问题标题】:Convert a string to a resource Uri for mp3 playback将字符串转换为资源 Uri 以进行 mp3 播放
【发布时间】:2012-02-08 15:57:25
【问题描述】:

我正在尝试使用媒体播放器类播放 mp3。当我对 mp3 资源进行硬编码时,它可以工作,但是我希望资源来自字符串,而不是像 R.raw.mp3name 那样直接访问它。

Bundle bundle = getIntent().getExtras();
String Choice= bundle.getString("bundledChoice");        
Uri myUri = Uri.parse("R.raw." + Choice);        
mPlayer = MediaPlayer.create(activity.this, myUri);
mPlayer.start();

如果我将倒数第二行更改为 mPlayer = MediaPlayer.create(activity.this, R.raw.song) 它将起作用,问题是从捆绑包中获取的字符串动态创建资源 URI。

请指教。

【问题讨论】:

  • 我想更好的表达方式是“我如何使用字符串引用资源@R.raw...”
  • R.raw 的资源是在 R 类的编译时生成的,该类为资源创建 ID。 URI.parse() 需要一个符合 RFC 2396 的编码 URI PARAMETER。 R.raw.song 是这首歌的 int ID。您可能想阅读类似stackoverflow.com/questions/559902/… 的内容并检查如何从 File 对象创建 Uri。谢谢
  • 谢谢 Sergey,我用这篇文章得到了答案stackoverflow.com/questions/6679434/…
  • @brux,对不起,我在这里很昏暗,你能发布一个代码片段吗?我无法在您引用的帖子和解决问题之间建立联系...

标签: java android


【解决方案1】:

我发现 this solution 非常简单且有效(对我而言),但我尝试使用 Uri.parse() 的所有操作均无效。

private void playMp3(String nameOfFile){
    MediaPlayer mPlayer = MediaPlayer.create(this, getResources().getIdentifier(nameOfFile, "raw", getPackageName()));
    mPlayer.start();
}

【讨论】:

    【解决方案2】:

    我用来应对这个小挑战的解决方案是基于@Creator 对这篇文章的回答:Android - getting an image resource into Uri: IllegalArgumentException

    解决办法是用

    Uri uri = Uri.parse("android.resource://[package]/[res type]/[res name]");
    

    [package] 你要么知道 (com.company.blah.superdooperthing),要么可以使用 getPackageName() 确定。

    [res type] 是(我认为,它似乎工作)您从中提取资源的“res”内的目录。因此,对于音频文件 .../res/raw/nicemusic.mp3,res 将是“原始”。

    [res name] 是(我认为,它似乎工作)资源的文件名(较少扩展名)。因此,对于上面的示例,它将是“nicemusic”。

    因此,更系统的方法可能是:

    String dataResourceDirectory = "raw";
    String dataResoruceFilename = "nicemusic";
    
    Uri uri=Uri.parse("android.resource://" + getPackageName() + "/" + 
                      dataResourceDirectory + "/" + dataResoruceFilename);
    

    欢迎提供更好的解决方案!

    【讨论】:

      【解决方案3】:

      可以在这里找到答案。解析资源的 int ID 有帮助:Android findViewbyId with a variant string

      【讨论】:

        【解决方案4】:

        您是否尝试过这样做?

        MediaPlayer mp = new MediaPlayer();
        mp.setDataSource(path+"/"+fileName); 
        

        希望对你有帮助

        【讨论】:

          【解决方案5】:

          试试这个:

          Bundle bundle = getIntent().getExtras();
              String choice= blabla// your solution to get song name
              String debug = "R.raw." + choice;   
              Uri myUri = Uri.parse(debug);        
              mPlayer = MediaPlayer.create(activity.this, myUri);
              mPlayer.start();
          

          【讨论】:

          • 仅仅将 R.raw... 重构为一个变量在这里没有帮助。
          【解决方案6】:

          您正在尝试将文字字符串R.raw.xyz 转换为 URI。 您真正想要的是首先将 R.war.xyz 解析为字符串,然后将其转换为 Uri。 有例如Context.getString() 用于此目的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-12-17
            • 2013-06-25
            • 2011-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多