AudioActivity

本文详细介绍了一个基于Android平台的简单音频播放器实现过程。该播放器具备播放、暂停、停止等功能,并通过SeekBar实现了进度控制及调整。文章通过具体代码展示了如何使用Android的MediaPlayer进行音频文件的加载与播放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.media;


import java.io.IOException;

import android.app.Activity;
import android.app.AlertDialog;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class AudioActivity extends Activity implements OnCompletionListener{
 private ImageButton play,pause,stop;
 private MediaPlayer mp;
 TextView textView;
 SeekBar seekbar;
 
 private Handler mHandler;
 
  private Runnable update = new Runnable() {
         public void run() {
          int position = mp.getCurrentPosition();  
             int mMax = mp.getDuration();  
             int sMax = seekbar.getMax();  
             int time=position*sMax/mMax;
//             System.out.println("update position="+position);
//                System.out.println("update mMax="+mMax);
//                System.out.println("update sMax="+sMax);
//                System.out.println("update time="+time);
             textView.setText(time+"%");
             seekbar.setProgress(time);  
          seekbar.postInvalidate();
             mHandler.postDelayed(update, 1000);
         }
     };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.audio);
       
        mHandler = new Handler();
        mHandler.post(update);
       
        textView = (TextView)findViewById(R.id.audio_textview);
        play = (ImageButton)findViewById(R.id.play);
        pause = (ImageButton)findViewById(R.id.pause);
        stop = (ImageButton)findViewById(R.id.stop);
        seekbar=(SeekBar)findViewById(R.id.seekb);
       
        play.setOnClickListener(new View.OnClickListener() {
   public void onClick(View view) {
    play();
   }
  });
  
  pause.setOnClickListener(new View.OnClickListener() {
   public void onClick(View view) {
    pause();
   }
  });
  
  stop.setOnClickListener(new View.OnClickListener() {
   public void onClick(View view) {
    stop();
   }
  });
  seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){  
            @Override 
            public void onProgressChanged(SeekBar seekBar, int progress,  
                    boolean fromUser) {  
            }  
            @Override 
            public void onStartTrackingTouch(SeekBar seekBar) {  
            }  
            @Override 
            public void onStopTrackingTouch(SeekBar seekBar) {  
                // TODO Auto-generated method stub  
                int dest = seekBar.getProgress(); //获得SeekBar拖动后的数值 
                int mMax = mp.getDuration();  //获得整个音频的播放周期(时间)
                int sMax = seekbar.getMax();//获得SeekBar的最大值
                int position=mMax*dest/sMax;//计算音频的播放位置   dest/sMax是百分比
                System.out.println("dest="+dest);
                System.out.println("mMax="+mMax);
                System.out.println("sMax="+sMax);
                System.out.println("position="+position);
                mp.seekTo(position);  
                  
            }  
              
        }); 
  
  setup();
    }

    @Override
 public void onDestroy() {
  super.onDestroy();
  if (stop.isEnabled()) {
   stop();
  }
 }
 
 private void play() {
  mp.start();
  play.setEnabled(false);
  pause.setEnabled(true);
  stop.setEnabled(true);
 }
 
 private void stop() {
  mp.stop();
  pause.setEnabled(false);
  stop.setEnabled(false);
  try {
   mp.prepare();
   mp.seekTo(0);
   play.setEnabled(true);
  }
  catch (Throwable t) {
   error(t);
  }
 }
 
 private void pause() {
  mp.pause();
  play.setEnabled(true);
  pause.setEnabled(false);
  stop.setEnabled(true);
 }
 
 private void loadClip() {
  try {
//   mp=MediaPlayer.create(this, R.raw.when_you_believe);
   mp=new MediaPlayer();
   mp.setOnCompletionListener(this);
   mp.setDataSource("/sdcard/test.mp3");
   mp.prepare();
  }
  catch (Throwable t) {
   error(t);
  }
 }
 
 private void setup() {
  loadClip();
  play.setEnabled(true);
  pause.setEnabled(false);
  stop.setEnabled(false);
 }
 
 private void error(Throwable t) {
  AlertDialog.Builder builder=new AlertDialog.Builder(this);
  builder
   .setTitle("报错啦!")
   .setMessage(t.toString())
   .setPositiveButton("确定", null)
   .show();
 }

 @Override
 public void onCompletion(MediaPlayer mp1) {
  Log.d("mediaplayer","onCompletion");
//  mp.seekTo(0);
  mp.start();
  play.setEnabled(true);
  pause.setEnabled(false);
  stop.setEnabled(false);
 }
}

转载于:https://my.oschina.net/donghu/blog/9815

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值