Android提供了许多方法来控制音频/视频文件和流的播放.其中一种方法是通过名为 MediaPlayer 的类.
Android提供MediaPlayer类来访问内置媒体播放器服务,如播放音频,视频e.t.c.为了使用MediaPlayer,我们必须调用此类的静态方法 create().此方法返回MediaPlayer类的实例.其语法如下 :
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.song);
第二个参数是您要播放的歌曲的名称.您必须在项目下创建一个名为 raw 的新文件夹,并将音乐文件放入其中.
创建Mediaplayer对象后,您可以调用一些开始或停止音乐的方法.这些方法如下所示.
mediaPlayer.start();mediaPlayer.pause();
在调用 start()方法时,音乐将从头开始播放.如果在 pause()方法之后再次调用此方法,则音乐将从其离开的位置开始播放而不是从开头播放.
为了从头开始播放音乐,你必须调用 reset()方法.其语法如下:
mediaPlayer.reset();
除了启动和暂停方法之外,此类还提供了其他方法来更好地处理音频/视频文件.这些方法列在下面 :
Sr.No | Method& description |
---|---|
1 | isPlaying () 此方法只返回true/false,表示正在播放歌曲 |
2 | seekTo(position) 此方法采用整数,并将歌曲移动到特定位置毫秒 |
3 | getCurrentPosition() 此方法以毫秒为单位返回歌曲的当前位置 |
4 | getDuration( ) 此方法以毫秒为单位返回歌曲的总持续时间 |
5 | reset() 此方法重置媒体播放器 |
6 | release() 此方法释放附加了MediaPlayer对象的所有资源 |
7 | setVolume(float leftVolume,float rightVolume) 此方法设置此播放器的上调音量 |
8 | setDataSource(FileDescriptor fd) 此方法设置音频的数据源/video file |
9 | selectTrack(int index) 此方法采用整数,并从该列表中的特定索引中选择轨道 |
10 | getTrackInfo() 此方法返回一个曲目信息数组 |
示例
以下是演示使用MediaPlayer类的示例.它创建了一个基本的媒体播放器,允许你前进,后退,播放和暂停一首歌.
要试验这个例子,你需要在实际设备上运行它来听音频声音.
步骤 | 描述 |
---|---|
1 | 你将使用Android studio IDE在com.example.sairamkrishna.myapplication包下创建一个Android应用程序. |
2 | 修改src/MainActivity.java文件以添加MediaPlayer代码. |
3 | 修改res/layout/activity_main以添加相应的XML组件 |
4 | 在MediaPlayer下创建一个名为raw的新文件夹,并在其中放置一个mp3音乐文件,名称为song.mp3 |
5 | 运行应用程序并选择正在运行的android设备并在其上安装应用程序并验证结果 |
以下是修改后的主要活动文件的内容 src/MainActivity.java .
package com.example.sairamkrishna.myapplication;import android.app.Activity;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.SeekBar;import android.widget.TextView;import android.widget.Toast;import java.util.concurrent.TimeUnit;public class MainActivity extends Activity { private Button b1,b2,b3,b4; private ImageView iv; private MediaPlayer mediaPlayer; private double startTime = 0; private double finalTime = 0; private Handler myHandler = new Handler();; private int forwardTime = 5000; private int backwardTime = 5000; private SeekBar seekbar; private TextView tx1,tx2,tx3; public static int oneTimeOnly = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1 = (Button) findViewById(R.id.button); b2 = (Button) findViewById(R.id.button2); b3 = (Button)findViewById(R.id.button3); b4 = (Button)findViewById(R.id.button4); iv = (ImageView)findViewById(R.id.imageView); tx1 = (TextView)findViewById(R.id.textView2); tx2 = (TextView)findViewById(R.id.textView3); tx3 = (TextView)findViewById(R.id.textView4); tx3.setText("Song.mp3"); mediaPlayer = MediaPlayer.create(this, R.raw.song); seekbar = (SeekBar)findViewById(R.id.seekBar); seekbar.setClickable(false); b2.setEnabled(false); b3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "Playing sound",Toast.LENGTH_SHORT).show(); mediaPlayer.start(); finalTime = mediaPlayer.getDuration(); startTime = mediaPlayer.getCurrentPosition(); if (oneTimeOnly == 0) { seekbar.setMax((int) finalTime); oneTimeOnly = 1; } tx2.setText(String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes((long) finalTime), TimeUnit.MILLISECONDS.toSeconds((long) finalTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) finalTime))) ); tx1.setText(String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes((long) startTime), TimeUnit.MILLISECONDS.toSeconds((long) startTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime))) ); seekbar.setProgress((int)startTime); myHandler.postDelayed(UpdateSongTime,100); b2.setEnabled(true); b3.setEnabled(false); } }); b2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "Pausing sound",Toast.LENGTH_SHORT).show(); mediaPlayer.pause(); b2.setEnabled(false); b3.setEnabled(true); } }); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int temp = (int)startTime; if((temp+forwardTime)<=finalTime){ startTime = startTime + forwardTime; mediaPlayer.seekTo((int) startTime); Toast.makeText(getApplicationContext(),"You have Jumped forward 5 seconds",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(getApplicationContext(),"Cannot jump forward 5 seconds",Toast.LENGTH_SHORT).show(); } } }); b4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int temp = (int)startTime; if((temp-backwardTime)>0){ startTime = startTime - backwardTime; mediaPlayer.seekTo((int) startTime); Toast.makeText(getApplicationContext(),"You have Jumped backward 5 seconds",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(getApplicationContext(),"Cannot jump backward 5 seconds",Toast.LENGTH_SHORT).show(); } } }); } private Runnable UpdateSongTime = new Runnable() { public void run() { startTime = mediaPlayer.getCurrentPosition(); tx1.setText(String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes((long) startTime), TimeUnit.MILLISECONDS.toSeconds((long) startTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS. toMinutes((long) startTime))) ); seekbar.setProgress((int)startTime); myHandler.postDelayed(this, 100); } };}
以下是xml res/layout/activity_main.xml 的修改内容.
在下面的代码中 abc 表示it1352的标识.com
以下是 res/values/string.xml 的内容.
My Application >]]> ||
以下是 AndroidManifest.xml 文件的内容.
让我们尝试运行您的应用程序.我假设您已将实际的Android移动设备与计算机相关联.要从Eclipse运行应用程序,请打开项目的一个活动文件,然后单击运行 icon工具栏.在开始申请之前,Android studio将显示以下屏幕
默认情况下,您会看到暂停按钮被禁用.现在按下播放按钮,它将变为禁用,暂停按钮变为启用状态.它显示在下面和下面的图片中;
到目前为止,音乐一直在播放.现在按暂停按钮查看暂停通知.这显示在下面 :
现在当你再次按下播放按钮,歌曲将不会从头开始播放,而是从暂停播放的位置播放.现在按快进或快退按钮将歌曲向前或向后跳5秒.歌曲无法向前跳跃的时候到了.此时,通知会出现类似这样的内容;
当您在手机中执行其他任务时,您的音乐将继续在后台播放.为了阻止它,你必须从后台活动中退出这个应用程序.
当你选择倒带按钮时,会显示上图.