多媒体_音乐播放器

news/2024/10/23 5:49:38/

第九章动画干过一遍了,大部分都能理解套路。接下来学第十章


1、简单的利用MediaPlayer制作音乐播放基础

1.1先看看xml很简单 定义几个基本的按钮

<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.hejingzhou.mp3.MainActivity"><TextViewandroid:id="@+id/textViewshow"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:text="State"android:textAppearance="?android:attr/textAppearanceLarge" /><Buttonandroid:id="@+id/buttonZanting"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/buttonTingzhi"android:layout_alignBottom="@+id/buttonTingzhi"android:layout_toRightOf="@+id/buttonTingzhi"android:text="暂停" /><Buttonandroid:id="@+id/buttonKaishi"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/textViewshow"android:layout_marginTop="112dp"android:layout_toLeftOf="@+id/buttonTingzhi"android:text="开始" /><Buttonandroid:id="@+id/buttonTingzhi"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/buttonKaishi"android:layout_alignBottom="@+id/buttonKaishi"android:layout_centerHorizontal="true"android:text="停止" />
</RelativeLayout></span>


1.2 MainActivity

package com.example.hejingzhou.mp3;<span style="font-size:18px;">import android.media.MediaPlayer;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import java.io.File;public class MainActivity extends AppCompatActivity {private MediaPlayer mediaPlayer;private boolean isPause = false;//是否暂停private File file;private TextView textView;//声明显示提示信息@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final Button buttonStart = (Button) findViewById(R.id.buttonKaishi);final Button buttonStop = (Button) findViewById(R.id.buttonTingzhi);final Button buttonZanting = (Button) findViewById(R.id.Zanting);final TextView textViewShow = (TextView) findViewById(R.id.textViewshow);file = new File("/data/mp3.mp3");//获取播放的文件这个文件必须要指定放入同名的mp3文件if (file.exists()) {  //</span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;">返回一个boolean值,指示是否可以找到此文件·底层文件系统上。</span><span style="font-size:18px;">
mediaPlayer = MediaPlayer.create(this, Uri.parse(file.getAbsolutePath()));//解析路径文件传递给mediaPlayer对象} else {textViewShow.setText("要播放的文件不存在");buttonStart.setEnabled(false);//设置为Button不在响应return;}/*** 按键监听* */mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {//注册一个回调时要调用的媒体源底在回放期间,已达到。@Overridepublic void onCompletion(MediaPlayer arg0) {// TODO Auto-generated method stubpaly();}});
</span><pre name="code" class="java"><span style="font-size: 18px;">/*** 按键监听* */</span>
buttonStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub paly(); if (isPause) { buttonZanting.setText("暂停"); isPause = false; } buttonZanting.setEnabled(true); buttonStop.setEnabled(true); buttonStart.setEnabled(false);//播放不可用 } }); /** * 停止 * */ buttonStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub mediaPlayer.stop(); textViewShow.setText("停止播放音频"); buttonZanting.setEnabled(false); buttonStop.setEnabled(false); buttonStart.setEnabled(true);//只允许开始可以操作 } }); /** * 暂停监听 * */ buttonZanting.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub if (mediaPlayer.isPlaying() && !isPause)//如果状态是在监听中,或者是 不是暂停中 { mediaPlayer.pause();//暂停播放 isPause = true; ((Button) arg0).setText("继续"); textViewShow.setText("暂停播放音频"); buttonStart.setEnabled(true); } else { mediaPlayer.start(); ((Button) arg0).setText("暂停"); textViewShow.setText("播放音频"); isPause = false; buttonStart.setEnabled(false); } } }); } /** * 播放 */ private void paly() { try { mediaPlayer.reset(); mediaPlayer.setDataSource(file.getAbsolutePath());//获取文件的绝对路径 mediaPlayer.prepare();//准备播放器 预加载音频 mediaPlayer.start();//开始播放 } catch (Exception e) { e.printStackTrace(); } } @Override protected void onDestroy() { // TODO Auto-generated method stub if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); } mediaPlayer.release();//释放资源 super.onDestroy(); }}

 


简单的效果:




2、稍微复杂的带有列表的播放器

2.1 xml文件
<span style="font-size:18px;color:#666600;"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.hejingzhou.bofangsdquanbuyinpin.MainActivity"android:background="@drawable/eee"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:id="@+id/linearLayout"><Buttonandroid:id="@+id/buttnoBrodcast"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="播放"/><Buttonandroid:id="@+id/buttnoPause"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="暂停"/><Buttonandroid:id="@+id/buttonUp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="上一首"/><Buttonandroid:id="@+id/buttonStop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="停止"/></LinearLayout><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"android:drawSelectorOnTop="false"android:layout_below="@+id/linearLayout" /><Buttonandroid:id="@+id/buttonDown"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="下一首"android:layout_above="@+id/listView"android:layout_toRightOf="@+id/linearLayout"android:layout_toEndOf="@+id/linearLayout" /><!--android:drawSelectorOnTop="true"  点击某一条记录,颜色会显示在最上面,记录上的文字被遮住,所以点击文字不放,文字就看不到android:drawSelectorOnTop="false" 点击某条记录不放,颜色会在记录的后面,成为背景色,但是记录内容的文字是可见的--></RelativeLayout></span><span style="color:#ff0000;">
</span>

2.2MainActivity



package com.example.hejingzhou.bofangsdquanbuyinpin;<span style="font-size:18px;color:#666600;">import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;import java.io.File;
import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private MediaPlayer mediaPlayer;private List<String> audioList = new ArrayList<String>();//定义一个存放音频的List表private int currentItem = 0;//当前项 当前播放歌曲的索引private Button buttonPause;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mediaPlayer = new MediaPlayer();//实例化mediaPlayer对象Button buttonUp = (Button) findViewById(R.id.buttonUp);Button buttonBrodcast = (Button) findViewById(R.id.buttnoBrodcast);buttonPause = (Button) findViewById(R.id.buttnoPause);Button buttonStop = (Button) findViewById(R.id.buttonStop);Button buttonDown = (Button) findViewById(R.id.buttonDown);audioList();/*** 为MediaPlayer 对象添加完成事件的监听器 在重写onCompletion方法中调用nextMusic()方法播放下一首音乐* */mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {nextMusic();//播放下一首}});buttonUp.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {preMusic();}});buttonBrodcast.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {playMusic(audioList.get(currentItem));}});buttonPause.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(mediaPlayer.isPlaying()){mediaPlayer.pause();((Button)v).setText("继续");}else{mediaPlayer.reset();//继续播放((Button) v).setText("暂停");}}});buttonStop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(mediaPlayer.isPlaying()){mediaPlayer.stop();}buttonPause.setEnabled(false);}});buttonDown.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {nextMusic();}});}private void audioList() {getFiles("/data/SD/");//自己定 存放资源ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, audioList);//创建一个适配器ListView listView = (ListView) findViewById(R.id.listView);listView.setAdapter(adapter);//将list列表设置一个适配器listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {currentItem = position;//将当前项的索引值传递给currentItemplayMusic(audioList.get(currentItem));}});}/*** 定义一个保存合法的文件格式的字符串数组,并编写根据文件路径判断文件是否为音频文件方法* */private static String[] imageFormatSet = new  String[] {"mp3","wav","3gp"};private static boolean isAudioFile(String path){for(String format : imageFormatSet){if(path.contains(format))//如果包含择个字符{return true;}}returnfalse;}/*** getFiles()函数  查找路径中的所有音频文件  并且将他添加到list里* */private void getFiles(String url){File files = new File(url);//创建一个新的文件对象File[] file = files.listFiles();//listFiles()该方法返回的路径名用于表示此抽象路径名的目录中的文件和目录的数组。try{for(File f : file)//遍历这个数组获取到的文件数组{if(f.isDirectory())  //如果是文件夹,那么就递归调用{getFiles(f.getPath());//递归}else{if(isAudioFile(f.getPath())){audioList.add(f.getPath());//找到音频文件并且将它添加到audioList表里}}}}catch (Exception e){e.printStackTrace();}}/*** 播放*/void playMusic(String path) {try {if (mediaPlayer.isPlaying()) {mediaPlayer.stop();}mediaPlayer.reset();mediaPlayer.setDataSource(path);//指定要播放文件的路径mediaPlayer.prepare();//预加载音频文件mediaPlayer.start();//播放音频buttonPause.setText("暂停");buttonPause.setEnabled(true);} catch (Exception e) {e.printStackTrace();}}/*** 下一首* */void nextMusic(){if(++currentItem >= audioList.size())//当对currentItem 进行+1操作后,如果其值大于等于音频文件的总数{currentItem = 0;}playMusic(audioList.get(currentItem));//调用playMusic()方法播放音乐}/*** 上一首* */void preMusic(){if(--currentItem >= 0)// 当对currentItem进行-1操作后 如果对其值大于等于0{if(currentItem >= audioList.size())//如果currentItem的值大于等于音频总数{currentItem = 0;}}else{currentItem = audioList.size() - 1;}playMusic(audioList.get(currentItem));}}</span>

存放指定文件路径

效果




源代码 : http://download.csdn.net/detail/csdnhejingzhou/9368472


http://www.ppmy.cn/news/407475.html

相关文章

音乐播放类

/* * localaudioplayer.java * * created on 2006年10月9日, 下午10:52 * * to change this template, choose tools | options and locate the template under * the source creation and management node. right-click the template and choose * open. you can then make ch…

2010年第3期新刊上市:移动大时代谁在掘金?

本期封面报道&#xff1a;移动大时代谁在掘金? 随着3G牌照的发放&#xff0c;中国的移动应用正酝酿着一股淘金热潮&#xff1b;海内外移动应用商店纷纷破土而出&#xff0c;更是为移动开发者大开方便之门。如何把握这次历史机遇&#xff1f;本刊特别邀请了挖掘到移动应用第一…

音乐播放器之--在线音乐播放

在线播放音乐并不难&#xff0c;也就是传入的Url是一个网络地址。这里我要实现一个可以进行网络缓冲的在线音乐播放。 下面介绍具体实现过程&#xff1a; 定义一个具有缓冲效果的播放器&#xff1a;Player 我们看到的缓冲效果&#xff0c;是通过设置拖动条SeekBar的二级进度实…

Android音乐播放器

自己用4个下午的时间4个晚上上半夜的时间1次吃泡面的时间Android音乐播放器。 Apk下载地址&#xff1a; 点击打开链接 亲...听歌只需甩甩手机哦&#xff0c;亲...欢迎下载. 源代码下载地址&#xff1a;点击打开链接V1.0 好长时间没有写博客了 前几天有人要源代码下载地址&…

Andriod本地音乐播放器

实现本地音乐播放器&#xff08;Client&#xff09; 这个稍微简单点&#xff1a;全是Andriod知识。 学习链接&#xff1a;Andriod本地音乐播放的学习&#xff08;这有讲课的大佬给的源码&#xff0c;需要自己去看视频自己去下载&#xff09;&#xff08;当然我的项目源码在后…

error “Incompatible build options“

问题1 CGAL环境&#xff0c;fatal error C1189: #error : "Incompatible build options" #if defined(__MSVC_RUNTIME_CHECKS) && !defined(_DEBUG) pragma message(“Using the /RTC option without specifying a debug runtime will lead to linker error…

播放音乐

HTML除了可以插入图形之外&#xff0c;还可以播放音乐和视频等。用浏览器可以播放的音乐格式有&#xff1a;MIDI音乐、WAV音乐、AU格式。另外在利用网络下载的各种音乐格式中&#xff0c;MP3是压缩率最高&#xff0c;音质最好的文件格式。 点播音乐 将音乐做成一个链接&#xf…

android 音乐播放器

java学习手册&#xff0c;最全java学习资料下载 服务和广播实现音乐播放器 先看示例&#xff1a; MusiceService代码 package mm.shandong.com.testsimplemedia.service;import android.app.Service; import android.content.BroadcastReceiver; import android.content.C…