【问题标题】:Passing Media from one Activity to another将媒体从一个活动传递到另一个活动
【发布时间】:2016-08-09 22:30:39
【问题描述】:

所以我试图在 android 上创建一个基本的音乐应用程序,它在列表视图中显示设备的歌曲,当一个人点击特定歌曲时,应用程序应该在不同的活动中播放它。

到目前为止,我已经能够从 sd 卡中提取歌曲,创建第二个用于播放歌曲的活动(由播放/暂停按钮和搜索栏提供)。

但是我如何将用户在列表视图中点按的歌曲传递给第二个活动以播放它。

【问题讨论】:

    标签: android listview android-intent mp3 media-player


    【解决方案1】:

    在这种情况下,您可以使用任何一个单例,这样您就可以创建一个 SongManager,这将是您的单例,用于存储您的歌曲并可以在第二个活动中播放 或者您可以在片段中显示列表视图,因此您的SongManager 不是单例,而只是由显示片段的活动管理的简单对象,当您想播放歌曲时,您可以打开另一个片段,询问歌曲参加活动。

    所以

    ACTIVITY (create the object `SongManager`)
       FRAGMENT A (ListView)
       FRAGMENT B (Play)
    

    【讨论】:

      【解决方案2】:

      我建议只将文件名作为字符串传递,即

      Intent intent = new Intent(ActivityA.this, ActivityB.class);
      intent.putExtra("SongKey", songFileName);
      startActivity(intent);
      

      【讨论】:

      • 我应该使用 MediaPlayer 上的哪个函数来播放我将通过 Intent 的歌曲(通过您推荐的方法)。我的意思是,现在我正在使用原始文件夹并使用 MediaPlayer 类的 create(..) 函数。现在我将传递歌曲标题,那么我应该使用什么函数来播放该歌曲
      • 如果您使用的是 MediaPlayer,请查看参考:developer.android.com/reference/android/media/MediaPlayer.html 特别是 setDataSource()。您可以将绝对文件路径作为 setDataSource() 的参数。但请务必遵循初始化 MediaPlayer 和播放的所有其他步骤。
      • stackoverflow.com/questions/38880528/… 这是我面临的问题。请看一看。我尝试阅读您提供的资源,但无法完全理解。
      • 抱歉,如果不查看更多代码,很难知道出了什么问题。您最后的问题是:“简单地说,我应该如何将先前意图中选择的同一首歌曲传递给提供的活动,所以可以播放。”这基本上听起来像这个线程中的原始问题..所以你现在的问题是这首歌没有播放?您是否看到任何错误/异常?歌曲存储在哪里?也许您的应用需要 READ_EXTERNAL_STORAGE 权限?
      • 没有错误或异常。是的,我也提到了许可。问题是如何从一个活动中传递一首歌曲并在另一个活动中播放它。
      【解决方案3】:

      您需要解析新活动的 mp3 路径,以便新活动可以播放您的歌曲

                    Intent intent = new Intent(getActivity(),Play.class);
                          intent.putExtra("title", titleX);
                          intent.putExtra("path", mp3path);
                          startActivity(intent);
      

      然后在 play.class 活动中

              title = getIntent().getStringExtra("title");
              location = getIntent().getStringExtra("path");
              //other function
              mediaPlayer.setDataSource(location);
              mediaPlayer.prepare();
      

      【讨论】:

      • 但是我如何获得路径。我正在努力使用 getExternalStorageDirecotry() 方法来获取歌曲的路径。这是正确的方法吗?
      • 如果你可以从sd卡中提取歌曲,那么你可以从中获取路径.. String fullpath = cur.getString(cur.getColumnIndex(MediaStore.Audio.Media.DATA));跨度>
      • 然后我是否必须通过 Bundle 将此完整路径变量传递给另一个 Intent。 String filePath = "somepath/somefile.mp3"; File file = new File(filePath); FileInputStream inputStream = new FileInputStream(file); mediaPlayer.setDataSource(inputStream.getFD()); inputStream.close(); 然后使用这段代码
      猜你喜欢
      • 1970-01-01
      • 2013-01-12
      • 2017-12-10
      • 2012-07-05
      • 2015-01-14
      • 2018-05-31
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多