小型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例程.当然用的板子也是安福莱的板子,因为算起来总共做了 ...
随机推荐
- [POJ 2588]--Snakes(并查集)
题目链接:http://poj.org/problem?id=2588 Snakes Time Limit: 1000MS Memory Limit: 65536K Description B ...
- 我的wifi
首先利用百度查找 怎么承载网络,托管网络的用户名和密码 . 1.以管理员身份运行命令提示符: 快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡: 运行命令:netsh wlan se ...
- Spring MVC 3.x 版本使用 @ResponseBody 返回乱码
由于万恶的Spring MVC 默认返回编码 是 ISO-8859-1, 使用如下配置, 可以将编码专为UTF-8, <bean class="org.springframework. ...
- PHPer的等级划分
PHPer的等级划分 前一段时间刚刚完成PHP的培训,然后想知道自己目前的水平(或者说等级),并且应该在哪些方面进行提高,所以在网上查了一下相关介绍.其中有一篇介绍讲的挺清楚的,至少目前的我还是很认同 ...
- centos6.5 mysql安装+远程访问+备份恢复+基本操作+卸载
参考博文: Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置 MySQL修改root密码的多种方法 MySQL的备份与还原 解决mysql导入还原时乱码的问题 ...
- __get __set 实例
<?php class Person { //下面是人的成员属性,都是封装的私有成员 private $name; //人的名子 private $sex; //人的性别 private $ag ...
- windows环境下Mongodb分片配置
使用MongoDB的GridFS来存储文件,以前一直使用单个服务,分布式环境也一直没有配置成功,今天参考了几位大神的文章终于配置成功,再也不用担心文件存储的性能和安全啦.以下是自己部署的过程和示例,记 ...
- java--偏向锁
Java偏向锁(Biased Locking)是Java 6引入的一项多线程优化.它通过消除资源无竞争情况下的同步原语,进一步提高了程序的运行性能. 轻量级锁也是一种多线程优化,它与偏向锁的区别在于, ...
- ZOJ 3211 Dream City DP 01背包 经典问题
题目大意:JAVAMAN 到梦幻城市旅游见到了黄金树,黄金树上每天回结出金子.已经有n棵树,JAVAMAN要停留m天,每天只能砍掉一棵树,砍掉树后就能得到树上的黄金.给定n棵树上原有的黄金a[i]和每 ...
- BAAS
http://blogs.embarcadero.com/sarinadupont/category/baas-tutorials/?cid=701G0000000vH0A&elq=51f98 ...