首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android音乐播放器例证及其源码分析

2012-06-20 
android音乐播放器例子及其源码分析 android音乐播放器例子及其源码分析 这个例子是播放音乐的一个小例子

android音乐播放器例子及其源码分析

 

android音乐播放器例子及其源码分析

 

这个例子是播放音乐的一个小例子也比较简单,大家需要去下载2个.mp3结尾的歌曲,然后放到SD卡里边 进行测试,就可以看到效果了。 运行效果如下

效果图:

android音乐播放器例证及其源码分析

 


 

Java代码:

    <?xml version="1.0" encoding="utf-8"?>
    <AbsoluteLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ListView
    android:id="@id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:drawSelectorOnTop="false"/>
    <ImageButton
    android:id="@+id/LastImageButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="10px"
    android:layout_y="70px"
    android:src="@drawable/last"
    />
    <ImageButton
    android:id="@+id/StopImageButton"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_x="70px"
    android:layout_y="70px"
    android:src="@drawable/stop"
    />
    <ImageButton
    android:id="@+id/StartImageButton"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_x="130px"
    android:layout_y="70px"
    android:src="@drawable/start"
    />
    <ImageButton
    android:id="@+id/PauseImageButton"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_x="190px"
    android:layout_y="70px"
    android:src="@drawable/pause"
    />
    <ImageButton
    android:id="@+id/NextImageButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="250px"
    android:layout_y="70px"
    android:src="@drawable/next"
    />
    </AbsoluteLayout>
复制代码


musicitme.xml

Java代码:

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>
复制代码


只有一个类 Activity1

Java代码:

    package eoe.demo;

    import java.io.File;
    import java.io.FilenameFilter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import android.app.ListActivity;
    import android.media.MediaPlayer;
    import android.media.MediaPlayer.OnCompletionListener;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.ImageButton;
    import android.widget.ListView;

    public class Activity01 extends ListActivity
    {
    /* 几个操作按钮 */
    private ImageButton mFrontImageButton = null;
    private ImageButton mStopImageButton = null;
    private ImageButton mStartImageButton = null;
    private ImageButton mPauseImageButton = null;
    private ImageButton mNextImageButton = null;

    /* MediaPlayer对象 */
    public MediaPlayer mMediaPlayer = null;

    /* 播放列表 */
    private List<String> mMusicList = new ArrayList<String>();

    /* 当前播放歌曲的索引 */
    private int currentListItme = 0;

    /* 音乐的路径 */
    private static final String MUSIC_PATH = new String("/sdcard/");

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    /* 更新显示播放列表 */
    musicList();
    /* 构建MediaPlayer对象 */
    mMediaPlayer = new MediaPlayer();

    mFrontImageButton = (ImageButton) findViewById(R.id.LastImageButton);
    mStopImageButton = (ImageButton) findViewById(R.id.StopImageButton);
    mStartImageButton = (ImageButton) findViewById(R.id.StartImageButton);
    mPauseImageButton = (ImageButton) findViewById(R.id.PauseImageButton);
    mNextImageButton = (ImageButton) findViewById(R.id.NextImageButton);

    //停止按钮
    mStopImageButton.setOnClickListener(new ImageButton.OnClickListener()
    {
    @Override
    public void onClick(View v)
    {
    /* 是否正在播放 */
    if (mMediaPlayer.isPlaying())
    {
    //重置MediaPlayer到初始状态
    mMediaPlayer.reset();
    }
    }
    });

    //开始按钮
    mStartImageButton.setOnClickListener(new ImageButton.OnClickListener()
    {
    @Override
    public void onClick(View v)
    {
    playMusic(MUSIC_PATH + mMusicList.get(currentListItme));
    }
    });

    //暂停
    mPauseImageButton.setOnClickListener(new ImageButton.OnClickListener()
    {
    public void onClick(View view)
    {
    if (mMediaPlayer.isPlaying())
    {
    /* 暂停 */
    mMediaPlayer.pause();
    }
    else
    {
    /* 开始播放 */
    mMediaPlayer.start();
    }
    }
    });

    //下一首
    mNextImageButton.setOnClickListener(new ImageButton.OnClickListener()
    {
    @Override
    public void onClick(View arg0)
    {
    nextMusic();
    }
    });
    //上一首
    mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener()
    {
    @Override
    public void onClick(View arg0)
    {
    FrontMusic();
    }
    });
    }

    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
    if ( keyCode == KeyEvent.KEYCODE_BACK)
    {
    mMediaPlayer.stop();
    mMediaPlayer.release();
    this.finish();
    return true;
    }
    return super.onKeyDown(keyCode, event);
    }

    @Override
    /* 当我们点击列表时,播放被点击的音乐 */
    protected void onListItemClick(ListView l, View v, int position, long id)
    {
    currentListItme = position;
    playMusic(MUSIC_PATH + mMusicList.get(position));
    }

    /* 播放列表 */
    public void musicList()
    {
    //取得指定位置的文件设置显示到播放列表
    File home = new File(MUSIC_PATH);
    if (home.listFiles(new MusicFilter()).length > 0)
    {
    for (File file : home.listFiles(new MusicFilter()))
    {
    mMusicList.add(file.getName());
    }
    ArrayAdapter<String> musicList = new ArrayAdapter<String>(Activity01.this,R.layout.musicitme, mMusicList);
    setListAdapter(musicList);
    }
    }

    private void playMusic(String path)
    {
    try
    {
    /* 重置MediaPlayer */
    mMediaPlayer.reset();
    /* 设置要播放的文件的路径 */
    mMediaPlayer.setDataSource(path);
    /* 准备播放 */
    mMediaPlayer.prepare();
    /* 开始播放 */
    mMediaPlayer.start();
    mMediaPlayer.setOnCompletionListener(new OnCompletionListener()
    {
    public void onCompletion(MediaPlayer arg0)
    {
    //播放完成一首之后进行下一首
    nextMusic();
    }
    });
    }catch (IOException e){}
    }

    /* 下一首 */
    private void nextMusic()
    {
    if (++currentListItme >= mMusicList.size())
    {
    currentListItme = 0;
    }
    else
    {
    playMusic(MUSIC_PATH + mMusicList.get(currentListItme));
    }
    }

    /* 上一首 */
    private void FrontMusic()
    {
    if (--currentListItme >= 0)
    {
    currentListItme = mMusicList.size();
    }
    else
    {
    playMusic(MUSIC_PATH + mMusicList.get(currentListItme));
    }
    }

    }

    /* 过滤文件类型 */
    class MusicFilter implements FilenameFilter
    {
    public boolean accept(File dir, String name)
    {
    //这里还可以设置其他格式的音乐文件
    return (name.endsWith(".mp3"));
    }
    }

 

    成为Android高手必须掌握的28大项内容和10个建议 

安卓Android和Java语言的异同、关系和区别 

 高校应届毕业生“IT业”收入最高,Android技术最热门 

贡献15本pdf完整版经典Android教程和海量Android源码 

71道经典Android面试题和答案--重要知识点都涉及到了  

Android App应用开发者年终总结--日均200元的广告收入

成为Java高手的25个学习目标--非常经典 

成为“Android高手”需要经过的六个阶段和6个境界

Android中设置146种颜色相对应的xml值

Android SDK 目录和作用的分析详解

Android中拍照、图片、录音、视频和音频功能的方法和代码

老程序员的忠告:不要做浮躁的软件工程师 

为程序开发人员量身定制的12个目标 

2011年3月最新“211工程”大学名单(共112所)

技术开发人员为什么会无奈苦逼?

印度和中国程序员的区别 


热点排行