定义layoutMediaPlayer实现了季独不同setDataSource()方法。

 

MediaPlayer

MediaPlayer是Android系统自带的,可以据此来播音音频、视频及流媒体。MediaPlayer包含了Audio和Video的广播功

界面布局,水平方向四独按钮平均分布,使用权重,定义android:layout_width=”0dp”,定义layout_weight=”1”这个特性都一致即是平均分布

常用方法

方法 说明
create 创建一多媒体
getCurrentPosition 当前播放位置
getDuration 文件的总时间
getVideoHeight 视频的高度
getVideoWidth 视频的宽度
isLooping 是否循环播放
isPlaying 是否正在播放
start 开始播放
pause 暂停
prepare 准备(同步)
prepareAsync 准备(异步)
stop 停止播放
release 释放相关资源
reset 重置
seekTo 指定
setAudioStreamType 设置类型
setDataSource 设多媒体数据来源
setDisplay 设置显示多媒体的载体
setLooping 是否循环播放
setOnButteringUpdateListener 网络流媒体的缓冲监听
setOnErrorListener 错误信息监听
setOnVideoSizeChangedListener 视频尺寸监听
setScreenOnWhilePlaying 设置是否保持屏幕常亮
setVolume 设置音量

 

播音实现

获取File对象,通过new File()来实现

简言之步骤

缔造一个MediaPlayer对象,实现start()方法,便可以简简单单播放音乐

    mPlayer = MediaPlayer.create(this, R.raw.summer);
    mPlayer.start();

判定文件是否是,File对象的exists()方法,File对象的length()必须大于0

具体步骤
  • 先创建MediaPlayer对象;

  • 调用setDataSource()方法来安音频文件来源;

  • 再次调用prepare()/prepareAysnc()方法进行准备;

  • 调用start方法就是足以播放音频。

      mediaPlayer = new MediaPlayer();
      mediaPlayer.setDataSource(file.getAbsolutePath());
     mediaPlayer.setOnPreparedListener(this);
      mediaPlayer.prepareAsync();
    
     //setOnPreparedListener(this)实现的方法
     @Override
     public void onPrepared(MediaPlayer mp) {
     mediaPlayer.start();
     }
    

MediaPlayer实现了季单不同setDataSource()方法

setDataSource (String path) 
setDataSource (FileDescriptor fd) 
setDataSource (Context context, Uri uri) 
setDataSource (FileDescriptor fd, long offset, long length)

足由路径,raw,Assets,网络等加载

 

实例

简单易行实现一个带进度长条之乐播放器

图片 1

image.png

布局文件特别简短,一个进度漫长,三单按钮

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:orientation="vertical">


<TextView
    android:id="@+id/tv_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="歌曲名"
    android:textSize="20dp"/>

<SeekBar
    android:id="@+id/seek_bar_music"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:max="0"
    android:progress="0" />


<Button
    android:id="@+id/btn_play"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:text="播放" />

<Button
    android:id="@+id/btn_pause"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:text="暂停" />

<Button
    android:id="@+id/btn_stop"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:text="停止" />

</LinearLayout>  

切实实现
点击播放按钮进行播放

        case R.id.btn_play:

            if (mPlayer != null) {
                mPlayer.release();
                mPlayer = null;
            }
            mPlayer = new MediaPlayer();
            mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mPlayer.setOnPreparedListener(this);
            try {
                mPlayer.setDataSource(url);
            } catch (Exception e) {
                e.printStackTrace();
            }
            mPlayer.prepareAsync();
            break;

OnPrepared准备得后,开始播报

      //setOnPreparedListener(this)实现的方法
@Override
public void onPrepared(MediaPlayer mp) {
    mp.start();
    timer();

}

点击暂停或者终止按钮,暂停或收尾播放

   case R.id.btn_pause:
            if (mPlayer.isPlaying()) {
                mPlayer.pause();
            }
            break;
   case R.id.btn_stop:
            if (mPlayer != null) {

                mPlayer.stop();
                mPlayer.reset();
            }
            break;

获取MediaPlayer对象,通过new出来

发端播报

调用MediaPlayer对象的setAudioStreamType()方法,设置音频流类型,参数:AudioManager.STREAM_MUSIC

调用MediaPlayer对象的setDataSource()方法,设置数据源,参数:String文件路径,也堪是http的

调用MediaPlayer对象的prepare()方法,准备

调用MediaPlayer对象的start()方法,播放

调用播放按钮的setEnable()方法,设置按钮为不可点击,参数:false

当播放了后答应安装按钮可点击

调用MediaPlayer对象的setOnCompletionListener()方法,设置完监听器,参数:OnCompletionListener接口,使用匿名内部类实现接口,重写方法onCompletion()方法,在是点子中调用播放按钮的setEnable(true)

 

艾播放

认清MediaPlayer对象非呢空,并且MediaPlayer对象isPlaying()为确实

调用MediaPlayer对象的stop()方法,停止播放

调用MediaPlayer对象的release()方法,是否

设置MediaPlayer对象为null

 

再次播放

判定MediaPlayer对象非呢空,并且MediaPlayer对象isPlaying()为真

调用MediaPlayer对象seekTo()方法,设置播放进度,参数:0就好

只要未设有,那么直接调用上面的播音函数

 

停顿播放

看清MediaPlayer对象非也空,并且MediaPlayer对象isPlaying()为确实

调用MediaPlayer对象的pause()方法,暂停播放

调用暂停按钮的setText()方法,设置文字成:继续

 

当此点击事件里判断文字是否也”继续”,如果是,就连续播放

调用MediaPlayer对象的start()方法

调用暂停安妮的setText()方法,设置文字成:暂停

 MainActivity.java

package com.tsh.tshplayer;

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.content.SharedPreferences.Editor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
    private EditText et_music;
    private Button bt_play, bt_pause, bt_stop, bt_replay;
    private MediaPlayer player;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_music = (EditText) findViewById(R.id.et_music);
        bt_play = (Button) findViewById(R.id.bt_play);
        bt_pause = (Button) findViewById(R.id.bt_pause);
        bt_stop = (Button) findViewById(R.id.bt_stop);
        bt_replay = (Button) findViewById(R.id.bt_replay);
        bt_play.setOnClickListener(this);
        bt_pause.setOnClickListener(this);
        bt_stop.setOnClickListener(this);
        bt_replay.setOnClickListener(this);
    }

    // 点击事件
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        // 播放
        case R.id.bt_play:
            play();
            break;
        // 暂停
        case R.id.bt_pause:
            pause();
            break;
        // 重播
        case R.id.bt_replay:
            replay();
            break;
        // 停止
        case R.id.bt_stop:
            stop();
            break;
        }
    }
    //停止播放
    private void stop() {
        if(player!=null&&player.isPlaying()){
            player.stop();
            bt_play.setEnabled(true);
        }
    }

    //重播音乐
    private void replay() {
        if(player!=null&&player.isPlaying()){
            player.seekTo(0);
        }
    }

    //暂停音乐
    private void pause() {
        if(player!=null&&player.isPlaying()){
            player.pause();
            bt_pause.setText("继续");
        }else if(bt_pause.getText().toString().trim().equals("继续")){
            player.start();
            bt_pause.setText("暂停");
        }
    }

    // 播放音乐
    private void play() {
        String music = et_music.getText().toString().trim();
        File file = new File(music);
        if (file.exists() && file.length() > 0) {
            try {
                player = new MediaPlayer();
                player.setAudioStreamType(AudioManager.STREAM_MUSIC);
                player.setDataSource(music);
                player.prepare();
                player.start();
                // 设置按钮
                bt_play.setEnabled(false);
                //音乐完成回调
                player.setOnCompletionListener(new OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        bt_play.setEnabled(true);
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(this, "播放音乐失败", 0).show();
            }
        } else {
            Toast.makeText(this, "音乐文件不存在", 0).show();
        }
    }
}

<LinearLayout 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:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >

    <EditText
        android:id="@+id/et_music"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="音乐路径" />
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button 
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="播放"
            android:id="@+id/bt_play"/>
        <Button 
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="暂停"
            android:id="@+id/bt_pause"/>
        <Button 
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="重播"
            android:id="@+id/bt_replay"/>
        <Button 
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="停止"
            android:id="@+id/bt_stop"/>
    </LinearLayout>

</LinearLayout>

图片 2

相关文章