多媒体_音乐播放器
来源:互联网 发布:python 字符串 查找 编辑:程序博客网 时间:2024/04/30 19:31
第九章动画干过一遍了,大部分都能理解套路。接下来学第十章
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"> <TextView android: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" /> <Button android: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="暂停" /> <Button android: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="开始" /> <Button android: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;//声明显示提示信息 @Override protected 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() { //注册一个回调时要调用的媒体源底在回放期间,已达到。 @Override public void onCompletion(MediaPlayer arg0) { // TODO Auto-generated method stub paly(); } });</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"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/linearLayout"> <Button android:id="@+id/buttnoBrodcast" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="播放"/> <Button android:id="@+id/buttnoPause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="暂停"/> <Button android:id="@+id/buttonUp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上一首"/> <Button android:id="@+id/buttonStop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止"/> </LinearLayout> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" android:drawSelectorOnTop="false" android:layout_below="@+id/linearLayout" /> <Button android: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; @Override protected 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() { @Override public void onCompletion(MediaPlayer mp) { nextMusic();//播放下一首 } }); buttonUp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { preMusic(); } }); buttonBrodcast.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { playMusic(audioList.get(currentItem)); } }); buttonPause.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mediaPlayer.isPlaying()) { mediaPlayer.pause(); ((Button)v).setText("继续"); }else { mediaPlayer.reset();//继续播放 ((Button) v).setText("暂停"); } } }); buttonStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mediaPlayer.isPlaying()) { mediaPlayer.stop(); } buttonPause.setEnabled(false); } }); buttonDown.setOnClickListener(new View.OnClickListener() { @Override public 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() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { currentItem = position;//将当前项的索引值传递给currentItem playMusic(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; } } return false; } /** * 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
0 0
- 多媒体_音乐播放器
- 多媒体音乐播放器
- Android多媒体(音乐播放器)
- 27.多媒体(音乐播放器)
- 多媒体_视频播放器
- Android多媒体--音乐播放器实例
- Android 多媒体中的音乐播放器编程
- android 多媒体——音乐播放器
- 安卓 多媒体音乐播放器
- 多媒体(音乐播放器+视频)
- Android多媒体之音乐播放器
- 多媒体音乐播放器(MediaPlayer)
- Android 多媒体中的音乐播放器
- Android多媒体(音乐播放器)实例
- android多媒体音乐(MediaPlayer)播放器
- Android---多媒体(音乐播放器)
- Android 多媒体(音乐播放器)
- 多媒体之播放音乐
- 拨打电话,发短信
- 第四十篇:opencv训练的正负样本的剪裁程序
- Java基础:死锁示例
- 使用GCD实现多线程队列
- 理解JVM的class文件结构
- 多媒体_音乐播放器
- zoj 3640 Help Me Escape 期望DP 简单题 适合记忆化搜索
- Project Euler-Integer right triangles
- JsplitPane
- 如何将办公文件转换成图片(一) -- 搭建Windows环境下OpenOffice+mupdf+vs2013的开发环境
- wine下玩魔兽的设置
- 数独(九宫格)的高效算法
- LeetCode 3Sum Closest
- System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.