如同使用摄像头一样,在应用程序中提供播放音频文件功能的最简单的方式是利用内置的“Music(音乐)”应用程序的功能。这个应用程序能够播放Android支持的所有格式,有一个用户熟悉的界面,并且可以通过意图来触发播放特定的文件。
将通用android.content.Intent.ACTION_VIEW意图的数据设置为一个音频文件的URI,并指定其MIME类型,这样Android就可以挑选适当的应用程序进行播放。这应该是Music应用程序,但是如果用户安装了其他的音频播放软件,那么可能存在其他选项。
1 Intent intent=new Intent(android.content.Intent.ACTION_VIEW); 2 intent.setDataAndType(audioFileUri, "audio/mp3"); 3 startActivity(intent);
下面是通过一个意图触发内置音频播放器应用程序的完整示例:
1 package com.nthm.androidtest; 2 3 import java.io.File; 4 import android.app.Activity; 5 import android.content.Intent; 6 import android.net.Uri; 7 import android.os.Bundle; 8 import android.os.Environment; 9 import android.view.View; 10 import android.view.View.OnClickListener; 11 import android.widget.Button;
在触发播放音频之前,活动将监听是否按下一个按钮。由于活动实现OnClickListener,因此它可以响应该事件。
1 public class AudioPlayer extends Activity implements OnClickListener { 2 private Button playButton; 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.audioplayer);
在将内容视图设置为我们的XML之后,可以在代码中获得按钮的引用,并设置活动(this)为OnClickListener。
1 playButton=(Button) findViewById(R.id.Button01); 2 playButton.setOnClickListener(this); 3 }
当单击按钮时,调用onClick方法。在该方法中使用的android.content.Intent.ACTION_VIEW构造意图,然后创建一个File对象,引用在SD卡上存在的音频文件。在当前情况下,音频文件被手动设置在SD卡的Music目录中,该目录是放置音乐相关音频文件的标准位置。
1 @Override 2 public void onClick(View v) { 3 Intent intent=new Intent(android.content.Intent.ACTION_VIEW); 4 File sdcard=Environment.getExternalStorageDirectory(); 5 File audioFile=new File(sdcard.getPath()+"music.mp3");
接下来,将意图的数据设置为源自音频文件的Uri,并将类型设置为其MIME类型——audio/mp3。最后,通过调用startActivity并传入意图来触发内置的应用程序启动。
1 intent.setDataAndType(Uri.fromFile(audioFile), "audio/mp3"); 2 startActivity(intent); 3 } 4 }
以下是一个简单的布局XML文件,指定用于上述活动的按钮文本为“Play Audio”。
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="match_parent" 3 android:layout_height="match_parent" 4 android:orientation="vertical" 5 > 6 <Button 7 android:layout_width="fill_parent" 8 android:layout_height="wrap_content" 9 android:text="Play Audio" 10 android:id="@+id/Button01" /> 11 </LinearLayout>