我是Android应用程序开发的新手,但我对JAVA和一般的编程有很好的了解。我正在尝试为Android编写一个应用程序,它可以将音乐文件排入Android中的默认音乐播放器(如Google Play音乐)。我的应用程序决定播放哪首歌,但我不想写一个成熟的音乐播放器应用程序。我只想用新音乐为现有的播放器应用程序提供信息。
我正在寻找像“应用程序间”通信(可能使用Intent?)之类的东西,通过它我可以将内容提供给音乐播放器并可能控制播放器本身。
我不确定Android中是否存在此类工具,因此也欢迎其他替代建议。另外,如果我没有正确解释问题,请告诉我。
答案 0 :(得分:1)
Intent是Android的一个非常强大的功能,在Java中没有任何直接模拟。您想要使用的是一种称为隐式Intent的机制。通常,当您从另一个活动启动一个活动时,您将创建一个Intent并指定要启动的活动。使用隐式Intent,您可以提供操作(Intent.ACTION_VIEW
)和数据(指向音乐文件的URI)。使用隐式Intent,您可以在不事先知道哪个Activity将执行处理的情况下处理一个数据。
当您将意图传递给startActivity()
时,操作系统将尝试以最佳方式解析数据,通常会弹出可能处理您数据的应用列表。用户选择适当的应用程序,该应用程序处理意图,播放音乐文件。任何注册为能够处理您的数据的服务的应用程序都将显示在列表中。传递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;
}
}