我是 Android 应用程序开发的新手,但我对 JAVA 和一般编程有很好的了解。我正在尝试为 android 编写一个应用程序,它可以将音乐文件排队到 android 中的默认音乐播放器(如 Google Play 音乐)。我的应用程序决定何时播放哪首歌,但我不想编写一个成熟的音乐播放器应用程序。我只想为现有播放器应用提供新音乐。
我正在寻找类似“应用程序间”通信(也许使用 Intent?)之类的东西,通过它我可以将内容提供给音乐播放器并可能控制播放器本身。
我不确定android中是否存在这样的设施,所以也欢迎其他替代建议。另外,如果我没有正确解释问题,请告诉我。
最佳答案
Intent 是 Android 的一项非常强大的功能,在 Java 中没有任何直接的类似功能。您想要使用的是一种称为隐式 Intent 的机制。通常,当您从一个 Activity 启动另一个 Activity 时,您会创建一个 Intent 并指定要启动哪个 Activity。使用隐式 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;
}
}
关于android - 如何通过应用程序将音乐排队到默认的 android 音乐播放器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16642829/