小型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例程.当然用的板子也是安福莱的板子,因为算起来总共做了 ...
随机推荐
- datetime方法
DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25 dt.ToFileTime().ToString(); dt.ToFile ...
- goahead 移植
1.网上下载goahead-3.1.-0-src.tgz包 2.解压 tar -zxvf goahead-3.1.-0-src.tgz 3.编译 cd goahead-3.1.-0 make CC=a ...
- Minimum Window Substring @LeetCode
不好做的一道题,发现String Algorithm可以出很多很难的题,特别是多指针,DP,数学推导的题.参考了许多资料: http://leetcode.com/2010/11/finding-mi ...
- Android广播——短信拦截
MainActivity.java package com.example.broadcasttest; import android.content.Intent; import android.c ...
- 基于visual Studio2013解决算法导论之022队列实现(基于链表)
题目 基于链表的队列实现 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> ...
- [置顶] 自定义java Annotation快速入门与提高
我们先来看看一个简单的注解类定义 import java.lang.annotation.Documented; import java.lang.annotation.Retention; impo ...
- Windows VS下搭建cocos2d-x环境搭建
VS2010以上版本(eg:VS2012/VS2013,这里本人用VS2013) 1.环境.安装包准备 2.python安装 3.cocos2d-x安装包解压安装 4.环境变量配置 5.执行setup ...
- 关于C++异常机制的笔记(SEH, try-catch)
昨天晚上加班解决了一个问题,是由于无法正确的捕获到异常导致的.刚开始用try-catch,但是没法捕获到异常:后面改成SEH异常才解决.因此今天将这个问题重新梳理了一遍,关于try-catch, SE ...
- C-KMP
一.BF算法 --传统算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符:若不相等,则比较S的 ...
- java--匿名类
匿名类的使用 package Test; abstract class C525{ abstract void foo(); } class B525{ // 局部类只能访问外包方法中的final成员 ...