小型Mp3播放器
准备三张图片,名字分别为: play、pause、stop。
将一个名为Mp3的文件放入res/raw文件夹中。
在main.xml中:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:id="@+id/info"
android:gravity="center_horizontal"
android:layout_marginTop="8dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:text="等待音频播放"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center_horizontal">
<ImageButton
android:id="@+id/play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/play"/>
<ImageButton
android:id="@+id/pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pause"/>
<ImageButton
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/stop"/>
</LinearLayout>
<SeekBar
android:id="@+id/seekbar"
android:layout_margin="8dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
在MyMediaPlayerDemo.java中:
package com.li.mediaplayer;
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
public class MyMediaPlayerDemo extends Activity {
private ImageButton play = null ;
private ImageButton pause = null ;
private ImageButton stop = null ;
private TextView info = null ;
private MediaPlayer myMediaPlayer = null ;
private SeekBar seekbar = null ;
private boolean playFlag = true ; // 播放标记
private boolean pauseFlag = true ; // 暂停标记
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.info = (TextView) super.findViewById(R.id.info) ;
this.play = (ImageButton) super.findViewById(R.id.play) ;
this.pause = (ImageButton) super.findViewById(R.id.pause) ;
this.stop = (ImageButton) super.findViewById(R.id.stop) ;
this.seekbar = (SeekBar) super.findViewById(R.id.seekbar) ;
this.play.setOnClickListener(new PlayOnClickListener()) ;
this.pause.setOnClickListener(new PauseOnClickListener()) ;
this.stop.setOnClickListener(new StopOnClickListener()) ;
this.seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListenerImpl()) ;
}
private class UpdateSeekBar extends AsyncTask<Integer, Integer, String> {
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
@Override
protected void onProgressUpdate(Integer... values) {
MyMediaPlayerDemo.this.seekbar.setProgress(values[0]) ;
}
@Override
protected String doInBackground(Integer... params) {
while(MyMediaPlayerDemo.this.playFlag) { // 播放的话,进度要增长
try {
Thread.sleep(params[0]) ;
} catch (InterruptedException e) {
}
this.publishProgress(MyMediaPlayerDemo.this.myMediaPlayer.getCurrentPosition()) ;
}
return null ;
}
}
private class PlayOnClickListener implements OnClickListener{
public void onClick(View v) {
MyMediaPlayerDemo.this.myMediaPlayer = MediaPlayer.create(
MyMediaPlayerDemo.this, R.raw.mp3); // 要播放的文件
if (MyMediaPlayerDemo.this.myMediaPlayer != null) {
MyMediaPlayerDemo.this.myMediaPlayer.stop(); // 停止操作
}
MyMediaPlayerDemo.this.seekbar.setMax(MyMediaPlayerDemo.this.myMediaPlayer.getDuration()) ; // 设置拖拽条的长度
UpdateSeekBar update = new UpdateSeekBar() ;
update.execute(1000) ;
MyMediaPlayerDemo.this.myMediaPlayer.setOnCompletionListener(new OnCompletionListener(){
public void onCompletion(MediaPlayer mp) {
MyMediaPlayerDemo.this.playFlag = false ; // 播放完毕
MyMediaPlayerDemo.this.myMediaPlayer.release() ; // 释放资源
}}) ;
try {
MyMediaPlayerDemo.this.myMediaPlayer.prepare() ;
MyMediaPlayerDemo.this.myMediaPlayer.start() ;
MyMediaPlayerDemo.this.info.setText("正在播放音频文件...") ;
} catch (Exception e) {
MyMediaPlayerDemo.this.info.setText("文件播放出现异常," + e) ;
}
}
}
private class PauseOnClickListener implements OnClickListener{
public void onClick(View v) {
if(MyMediaPlayerDemo.this.myMediaPlayer != null) {
if (MyMediaPlayerDemo.this.pauseFlag) { // 现在暂停
MyMediaPlayerDemo.this.myMediaPlayer.start();
MyMediaPlayerDemo.this.pauseFlag = false ;
} else {
MyMediaPlayerDemo.this.myMediaPlayer.pause(); // 暂停
MyMediaPlayerDemo.this.pauseFlag = true ;
}
}
}
}
private class StopOnClickListener implements OnClickListener{
public void onClick(View v) {
if(MyMediaPlayerDemo.this.myMediaPlayer != null) {
MyMediaPlayerDemo.this.myMediaPlayer.stop() ; // 停止
MyMediaPlayerDemo.this.info.setText("停止播放音频文件...") ;
}
}
}
private class OnSeekBarChangeListenerImpl implements OnSeekBarChangeListener {
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
MyMediaPlayerDemo.this.myMediaPlayer.seekTo(seekBar.getProgress()) ;
}
}
}
小型Mp3播放器的更多相关文章
- 从零开始学习PYTHON3讲义(十四)写一个mp3播放器
<从零开始PYTHON3>第十四讲 通常来说,Python解释执行,运行速度慢,并不适合完整的开发游戏.随着电脑速度的快速提高,这种情况有所好转,但开发游戏仍然不是Python的重点工作. ...
- 小型音乐播放器插件APlayer.js的简单使用例子
本篇博客将会给出一个小型音乐播放器插件APlayer.js的使用例子.关于APlayer.js的具体介绍和Github地址,可以参考: https://github.com/MoePlayer/A ...
- MP3播放器团队项目
一.设计思路 程序要求能播放MP3文件,因此需调用库中的播放方法:右键工具箱选择项,添加com组件,选择window media player后工具箱就会多一个控件,然后拖到窗体中就OK了.另在窗体中 ...
- 你也可以用java的swing可以做出这么炫的mp3播放器_源码下载
I had published the blog : 你用java的swing可以做出这么炫的mp3播放器吗? and to display some screenshots about this M ...
- 你用java的swing可以做出这么炫的mp3播放器吗?
这个mp3播放器是基于java的swing编写的,我认为界面还是可以拿出来和大家看一看评一评. 先说说创作的初衷,由于前段时间工作不是很忙,与其闲着,还不如找一些东西来给自己捣腾捣腾,在 之前写的 j ...
- MP3播放器的实现
今天,基本上实现了MP3播放器的基本功能,现在总结一下. 首先,下载服务器端的MP3列表,这里用到了下载技术和解析XML文件技术. 下载参考(http://blog.csdn.net/huim_lin ...
- 安卓MP3播放器开发实例(1)之音乐列表界面
学习安卓开发有一年了,想想这一年的努力,确实也收获了不少.也找到了比較如意的工作. 今天准备分享一个以前在初学阶段练习的一个项目.通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正 ...
- 开源mp3播放器--madplay 编译和移植 简记
madplay是一款开源的mp3播放器. http://madplay.sourcearchive.com/ 下面简单记录一下madplay的编译与移植到ARM开发板上的过程 一.编译x86版本的ma ...
- 基于Stm32的MP3播放器设计与实现
原创博文,转载请注明出处 这是我高级电子技术试验课做的作业,拿来共享一下.项目在安福莱例程基础之上进行的功能完善,里面的部分内容可参考安福莱mp3例程.当然用的板子也是安福莱的板子,因为算起来总共做了 ...
随机推荐
- MSSQLServer的备份与还原
最近用到了mssql2000的数据备份还原到2008上, 在备份2000时,一定注意要备份成一个文件,就是目标那里只添加一个就好,(否则待会还原数据库时要添加这两个文件,要不就报“备份了几个簇,只提供 ...
- 网络编程TCP协议-聊天室
网络编程TCP协议-聊天室(客户端与服务端的交互); <span style="font-size:18px;">1.客户端发数据到服务端.</span> ...
- 我的Python成长之路---第四天---Python基础(16)---2016年1月23日(寒风刺骨)
四.正则表达式 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和 ...
- java--String方法
String : 字符串类型 一.构造函数 String(byte[ ] bytes):通过byte数组构造字符串对象. String(char[ ] value):通过char数组构造字符串对象. ...
- 分享一个Redis帮助类
最近在项目中使用了redis来存储已经下载过的URL,项目中用的是ServiceStack来操作Redis,一开始ServiceStack的版本用的是最新的,后来发现ServiceStack已经商业化 ...
- Impossible WPF Part 1: Binding Properties
原文 http://www.11011.net/wpf-binding-properties Ever wanted to write the following? <RichTextBoxDo ...
- 基于visual Studio2013解决C语言竞赛题之0507筛选素数
题目
- MySQL分组数据
分组 理解分组能够看例如以下一个样例,首先我们打印出products表例如以下 从上面的表中能够看出.每一个vendor都有若干个产品,那么怎么一次统计每一个vendor有多少个产品呢? 这里就能够使 ...
- servlet 将输入内容通过拼接页面的方式显示出来
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- Surface,送我都不要
本文作于前几天,由于今天的突发新闻,已作了修订. Nokia的着火史 自从Elop那篇着火的平台备忘录出炉,Nokia的杯具就已经造成,唯一令人不解的就是:Elop为什么还没有被开除? 距离这个备忘录 ...