【问题标题】:How to enqueue music to default android music player via app?如何通过应用程序将音乐排入默认的 android 音乐播放器?
【发布时间】:2013-05-20 04:53:59
【问题描述】:

我是 android 应用程序开发的新手,但我对 JAVA 和一般编程方面有很好的了解。我正在尝试为 android 编写一个应用程序,它可以将音乐文件排入 android 中的默认音乐播放器(如 Google Play Music)。我的应用程序决定何时播放哪首歌,但我不想编写一个成熟的音乐播放器应用程序。我只想为现有的播放器应用提供新音乐。

我正在寻找类似“应用程序间”通信(可能使用 Intent?)之类的东西,通过它我可以向音乐播放器提供内容并可能控制播放器本身。

我不确定android中是否存在这样的设施,因此也欢迎其他替代建议。另外,如果我没有正确解释问题,请告诉我。

【问题讨论】:

    标签: android audio-player android-music-player


    【解决方案1】:

    Intent 是 Android 的一个非常强大的功能,Java 中没有任何直接的类似功能。您要使用的是一种称为隐式 Intent 的机制。通常,当您从另一个活动启动一个活动时,您会创建一个 Intent 并指定要启动的活动。使用隐式 Intent,您可以提供操作 (Intent.ACTION_VIEW) 和数据(指向音乐文件的 URI)。使用隐式 Intent,您可以在事先不知道哪个 Activity 将进行处理的情况下处理一段数据。

    当您将 Intent 传递给 startActivity() 时,操作系统将尝试以最佳方式解析数据,通常会弹出一个可能处理您数据的应用列表。用户选择适当的应用程序,该应用程序处理 Intent,播放您的音乐文件。任何注册为能够处理您的数据的服务的应用程序都将显示在列表中。通过 Intent 后,您的 Activity 将进入后台,处理该 Intent 的应用程序将进入前台。

    一旦用户从您的 Activity 中选择了一个应用来处理 Intent,该应用将始终被您的 Activity 用来处理这种 Intent,直到您删除自己应用的数据。

    查看official doc 以开始自己的工作,然后在遇到更具体的问题时提出新问题。

    这是一个代码示例,演示了一个非常简单的隐式 Intent 示例,通过该示例打开一个 URL,而不知道哪个浏览器会打开它:

    package com.marsatomic.intentimplicitdemo;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends Activity
    {
        public final static Uri URI = Uri.parse("http://www.marsatomic.com");
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button buttonConnect = (Button)findViewById(R.id.button_connect);
            buttonConnect.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View v)
                {
                    Intent i = new Intent(Intent.ACTION_VIEW, URI);
                    startActivity(i);
                }
            });
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    }
    

    【讨论】:

    • 感谢火星原子的回答。每次我的应用需要播放文件时,是否可以提前确定目标应用而不询问用户选择哪个应用?另外,我认为我有一个相当具体的问题。我希望我的应用程序能够控制音乐播放器并将内容提供给它。当我的应用程序开始运行时,它应该加载某些音乐文件并将它们排入音乐播放器并启动音乐播放器。另外,我知道这可以通过使我的应用程序成为独立的音乐播放器来实现。我正在寻找可以避免编写音乐播放器的替代解决方案。
    • 在我的回答中添加了第三段,为您澄清事情。使用隐式 Intent,您绝对可以避免编写音乐播放器。如果您的问题得到解答,请将答案标记为“已接受”,以方便未来的读者,并在新问题中创建更多具体的后续查询。
    • 此解决方案可以使用音乐播放器打开 URI。我也在寻找一种从我的应用程序控制音乐播放器的方法(播放/暂停/停止等)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2023-04-07
    相关资源
    最近更新 更多