求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
 
 
     
   
    全部     工程实例     标准规范     名校讲义     知识库    
 
 

Android开发教程
Android 开发环境配置
Android 架构
Android 应用组件
Android Hello World示例
Android 资源组织和访问
Android Activity
Android Service
Android 广播接收器
Android 内容提供者
Android 碎片/片段
Android Intent过滤器
Android UI布局
Android UI控件
Android 事件处理
Android 样式和主题
Android 自定义组件
Android 拖放
Android 通知
Android 基于位置服务
Android 发送电子邮件
Android 发送短信/SMS
Android 拨打电话
发布Android应用
ndroid Alertdialog
Android Animation实例
Android音频捕获
Android音频管理器实例
Android
Android最佳实践
Android Bluetooth实例
Android Camera
Android Clipboard
Android自定义字体
Android数据备份
Android Gestures/手势
Android图片效果
Android图片切换
Android内部存储
Android JetPlayer实例
Android JSON解析器
Android加载Spinner
Android本地化
Android登录实例
Android MediaPlayer
 
 

Android MediaPlayer(多媒体播放)

    您可以捐助,支持我们的公益事业。

金额: 1元 10元 50元

姓名:

邮件:

电话:

公司:

说明:

认证码: 验证码,看不清楚?请点击刷新验证码 必填



 
 捐助

Android提供了许多方法来控制播放的音频/视频文件和流。其中该方法是通过一类称为MediaPlayer。

Android是提供MediaPlayer类访问内置的媒体播放器的服务,如播放音频,视频等为了使用MediaPlayer,我们要调用这个类的静态create()?方法。此方法返回MediaPlayer类的一个实例。它的语法如下:

MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.song);

第二个参数是要播放的歌曲的名字。必须做出一个新的文件夹下的项目名称为raw,然后将音乐文件转换成它。

创建了MediaPlayer对象之后,可以调用一些方法来启动或停止音乐。这些方法在下面列出。

mediaPlayer.start();  mediaPlayer.pause();

在调用start()方法时,音乐将从头开始播放。如果此方法是pause()方法之后再次调用时,音乐将开始从那里被停住,而不是从头开始播放。

要从一开始启动音乐,必须调用 reset()方法。其语法如下给出:

mediaPlayer.reset();

除了start和pause方法,有用于与音频/视频文件更好处理提供的此类其他方法。这些方法如下:

例子

这里有一个例子演示如何使用的MediaPlayer类。它创建了一个基本的媒体播放器,可以前进,后退,播放和暂停播放歌曲。

为了试验这个例子,需要一个实际的设备上运行这听听声音。

 

Following is the content of the modifed main activity filesrc/com.yiibai.mediaplayer/MainActivity.java.

package com.example.mediaplayer;
    import java.util.concurrent.TimeUnit;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.os.Handler;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageButton;
    import android.widget.SeekBar;
    import android.widget.TextView;
    import android.widget.Toast;
    public class MainActivity extends Activity {
       public TextView songName,startTimeField,endTimeField;
     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 ImageButton playButton,pauseButton;
     public static int oneTimeOnly = 0;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        songName = (TextView)findViewById(R.id.textView4);
        startTimeField =(TextView)findViewById(R.id.textView1);
        endTimeField =(TextView)findViewById(R.id.textView2); 
       seekbar = (SeekBar)findViewById(R.id.seekBar1);
        playButton = (ImageButton)findViewById(R.id.imageButton1);
        pauseButton = (ImageButton)findViewById(R.id.imageButton2);
        songName.setText("song.mp3");
        mediaPlayer = MediaPlayer.create(this, R.raw.song);
        seekbar.setClickable(false);
        pauseButton.setEnabled(false); 
      } 
      public void play(View view){
     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;
        }
           endTimeField.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)))
        );
        startTimeField.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);
        pauseButton.setEnabled(true);
        playButton.setEnabled(false);
     }
       private Runnable UpdateSongTime = new Runnable() {
        public void run() {
           startTime = mediaPlayer.getCurrentPosition();
           startTimeField.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);
        }
     };
     public void pause(View view){
        Toast.makeText(getApplicationContext(), "Pausing sound",
         Toast.LENGTH_SHORT).show();
          mediaPlayer.pause();
        pauseButton.setEnabled(false);
        playButton.setEnabled(true);
     }
	     public void forward(View view)
{        int temp = (int)startTime;
        if((temp+forwardTime)<=finalTime){
           startTime = startTime + forwardTime;
           mediaPlayer.seekTo((int) startTime);
        }
        else{ 
          Toast.makeText(getApplicationContext(),
            "Cannot jump forward 5 seconds",
            Toast.LENGTH_SHORT).show();
        }
       }
     public void rewind(View view){
        int temp = (int)startTime;
        if((temp-backwardTime)>0){
           startTime = startTime - backwardTime;
           mediaPlayer.seekTo((int) startTime);
        }
        else{
           Toast.makeText(getApplicationContext(),
            "Cannot jump backward 5 seconds",
           Toast.LENGTH_SHORT).show();
        } 
      }
       @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;
    }
 }

Following is the modified content of the xml?res/layout/activity_main.xml.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:paddingBottom="@dimen/activity_vertical_margin"
     android:paddingLeft="@dimen/activity_horizontal_margin"
     android:paddingRight="@dimen/activity_horizontal_margin"
     android:paddingTop="@dimen/activity_vertical_margin"
     tools:context=".MainActivity" >
       <ImageButton
        android:id="@+id/imageButton3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="14dp"
        android:onClick="forward"
        android:src="@android:drawable/ic_media_ff" />
       <ImageButton
        android:id="@+id/imageButton4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/imageButton2"
        android:layout_marginLeft="22dp"
        android:layout_toRightOf="@+id/imageButton2"
        android:onClick="rewind"
        android:src="@android:drawable/ic_media_rew" />
       <ImageButton
        android:id="@+id/imageButton2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/imageButton1"
        android:layout_marginLeft="14dp"
        android:layout_toRightOf="@+id/imageButton1"
        android:onClick="pause"
        android:src="@android:drawable/ic_media_pause" />
       <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/imageButton3"
        android:layout_marginLeft="24dp"
        android:layout_toRightOf="@+id/imageButton3"
        android:onClick="play"
        android:src="@android:drawable/ic_media_play" />
       <SeekBar
        android:id="@+id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         android:layout_above="@+id/imageButton3"
        android:layout_toLeftOf="@+id/textView2"
        android:layout_toRightOf="@+id/textView1" />
       <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/imageButton3"
        android:layout_alignTop="@+id/seekBar1"
        android:text="@string/inital_Time"
        android:textAppearance="?android:attr/textAppearanceSmall" />
       <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageButton4"
        android:layout_alignTop="@+id/seekBar1"
        android:text="@string/inital_Time"
        android:textAppearance="?android:attr/textAppearanceSmall" />
       <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/imageButton3"
        android:text="@string/hello_world"
        android:textAppearance="?android:attr/textAppearanceMedium" />
       <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView3"
        android:src="@drawable/ic_launcher" />
       <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView3"
        android:layout_alignBottom="@+id/textView3"
        android:layout_toRightOf="@+id/imageButton1"
        android:text="TextView" />
    </RelativeLayout>

Following is the content of the?res/values/string.xml.

<?xml version="1.0" encoding="utf-8"?>
    <resources>
       <string name="app_name">MediaPlayer</string>
       <string name="action_settings">Settings</string>
       <string name="hello_world">Now Playing:</string>
       <string name="inital_Time">0 min, 0 sec</string>
    </resources>

Following is the content of?AndroidManifest.xml?file.

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.yiibai.mediaplayer"
     android:versionCode="1"
     android:versionName="1.0" >
       <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
       <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
           android:name="com.yiibai.mediaplayer.MainActivity"
           android:label="@string/app_name" >
           <intent-filter>
              <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
     </application>
  </manifest>

Let's try to run your MediaPlayer application. I assume you have connected your actual Android Mobile device with your computer. To run the app from Eclipse, open one of your project's activity files and click Run icon from the toolbar. Before starting your application, Eclipse will display following window to select an option where you want to run your Android application.

Select your mobile device as an option and then check your mobile device which will display your default screen:

By default you would see the pause button disabled. Now press play button and it would become disable and pause button become enable. It is shown in the picture below:

Uptill now , the music has been playing. Now press the pause button and see the pause notification. This is shown below:

Now when you press the play button again, the song will not play from the begining but from where it was paused. Now press the fast forwad or backward button to jump the song forward or backward 5 seconds. A time came when the song cannot be jump forward. At this yiibai , the notification would appear which would be something like this:

Your music would remain playing in the background while you are doing other tasks in your mobile. In order to stop it , you have to exit this application from background activities.


    您可以捐助,支持我们的公益事业。

金额: 1元 10元 50元

姓名:

邮件:

电话:

公司:

说明:

认证码: 验证码,看不清楚?请点击刷新验证码 必填



 
 捐助