Media Player的播放

package com.example.media_demo;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class MainActivity extends Activity {

    private MediaPlayer mediaPlayer;
    private SeekBar seekBar;
    private int duration;
    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            int progress=(Integer) msg.obj;
            //设置seekBarUI
            seekBar.setProgress(progress);
        };
    };
    private Timer timer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        seekBar = (SeekBar) findViewById(R.id.seekBar);
        timer = new Timer();
        // 在res 文件夹 下边创建raw 放音乐文件
        // create MediaPlayer mp = new MediaPlayer();
        // mp.prepare();
        // mediaPlayer = MediaPlayer.create(this, R.raw.myhome);
        mediaPlayer = new MediaPlayer();
        try {
            // mediaPlayer.setDataSource("mnt/sdcard/myhome.mp3");
            mediaPlayer.setDataSource(this, Uri.parse("mnt/sdcard/myhome.mp3"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
            
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
            
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                if(mediaPlayer!=null){
                    //progress 当前拖动的进度  max=100;  (progress* duration/max)
                    int currentDuration=(progress*duration/100);
                    //偏移至某一位置
                    mediaPlayer.seekTo(currentDuration);
                }
            }
        });
    }

    public void play(View v) {
        try {
            mediaPlayer.prepare();
        } catch (Exception e) {
            e.printStackTrace();
        }
        mediaPlayer.start();
        //获取音乐文件总长度
        duration = mediaPlayer.getDuration();
        TimerTask task = new TimerTask() {

            @Override
            public void run() {
                if(mediaPlayer!=null){
                    // 子线程
                    //获取音乐文件当前播放的长度位置
                    int currentPosition = mediaPlayer.getCurrentPosition();
                    // duration 100 当前2
                    int progress = (currentPosition * 100 / duration);
                    // 更新UI handler  将当前位置 和progress发给主线程.
                    Message message=Message.obtain();
                    message.obj=progress;
                    //发给主线程更新UI
                    handler.sendMessage(message);
                }
            }
        };
        // 每隔一秒钟更新seekBar UI
        timer.schedule(task, 0, 1000);
    }

    public void pause(View v) {
        // 不为空 正在播放
        if (mediaPlayer != null && mediaPlayer.isPlaying()) {
            mediaPlayer.pause();
        }
    }

    public void stop(View v) {
        if (mediaPlayer != null) {
            mediaPlayer.stop();
            timer.cancel();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mediaPlayer != null) {
            // 释放资源
            mediaPlayer.release();
            // 置为空
            mediaPlayer = null;
            //取消timer 任务
            timer.cancel();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值