Mediaplayer播放音乐控制

1、寻找控件

2.扫描sdcard下的map3文件

3.将扫描的文件添加到集合list中,并展示出来

setAdapter();

4.为listview设置条目点击监听事件(开启音乐)

lv.setOnItemClickListener(new OnItemClickListener() {

@Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                try {

cu = position;

//关闭timer任务(实时获取歌曲的进度)
                    stopTimer();
                    // 调用开启音乐的方法
                    startMusic(position);

} catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SecurityException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

}

});

5、开始音乐的方法

private void startMusic(int position) throws IOException {
        // 关闭正在播放的歌曲(避免播放多首歌曲)
        if (player != null && player.isPlaying()) {
            player.stop();
            player.release();
            player = null;

}

// 播放选中的歌曲

player = new MediaPlayer();
        player.setDataSource(list.get(position).getPath());
        player.prepare();
        player.start();
        
        //获取当前歌曲的总长度
        int duration = player.getDuration();
        //将歌曲 的总长度赋值给seekbar
        seekbar.setMax(duration);
        //使seekbar实时获取歌曲的进度
        getProgress();
    }

6、实时获取歌曲的进度

private void getProgress() {
        
        timer = new Timer();
        timer.schedule(new TimerTask() {
            
            @Override
            public void run() {
                
                //获取歌曲的进度
                int p = player.getCurrentPosition();
                
                //将获取歌曲的进度赋值给seekbar
                seekbar.setProgress(p);
            }
        }, 0, 2000);
    }

7、实现拖拽拖动条,歌曲可以以拖到的点接着播放歌曲(seekbar的监听事件)

//监听seekbar的进度
        seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                
                //获取进度条的进度
                int p = seekBar.getProgress();
                //将进度条的进度赋值给歌曲
                player.seekTo(p);
                //开始音乐继续获取歌曲的进度
                 getProgress();
            }
            
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                
                //取消timer任务
                stopTimer();
            }
            
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                
                
            }
        });

}

8、从本activity跳转到另一个activity,然后再返回来,歌曲再继续播放

@Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        System.out.println("main----onStop");
        stopTimer();
        // 记录当前歌曲的进度
            currentPosition = player.getCurrentPosition();
            SharedPreferences share = getSharedPreferences("current", 0);
            share.edit().putInt("id", currentPosition).putInt("nameid", cu)
                    .commit();

// 暂停歌曲
            player.stop();

}

@Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();
        System.out.println("main----onRestart");
        try {
            // 重新开始歌曲
            SharedPreferences share = getSharedPreferences("current", 0);
            int i = share.getInt("id", 0);
            player.prepare();
            player.seekTo(i);
            player.start();
            
            //seekbar实时获取歌曲进度
            getProgress();

} catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }/*
         * catch (IOException e) { // TODO Auto-generated catch block
         * e.printStackTrace(); }
         */catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

}
9.//关闭timer
    public void stopTimer()
    {
        if(timer!=null)
        {
            timer.cancel();
        }
    }

时间: 2024-10-11 17:38:01

Mediaplayer播放音乐控制的相关文章

Mediaplayer播放音乐控制(结合seekbar)

1.寻找控件 2.扫描sdcard下的map3文件 3.将扫描的文件添加到集合list中,并展示出来 setAdapter(): 4.为listview设置条目点击监听事件(开启音乐) lv.setOnItemClickListener(new OnItemClickListener() { @Override            public void onItemClick(AdapterView<?> parent, View view,                    int

Android MediaPlayer播放音乐并实现进度条

提前工作,往sd卡里放音乐文件 1.布局文件main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="

Android实例-MediaPlayer播放音乐和视频(XE8+小米2)

结果: 1.播放视频需要手动放入MediaPlayerControl1控件,设置MediaPlayerControl1.MediaPlayer := MediaPlayer1; 2.播放声音文件正常,但播放器视时发现,第一边正常第二边就报错了(哪位大神知道的,请M我哦,先谢谢了). 3.打包时需要打入MP3与MP4文件,路径为"assets\internal\". 实例代码: 1 unit Unit1; 2 3 interface 4 5 uses 6 System.SysUtils,

android 播放音乐-进度条

今天学渣研究了一下使用MediaPlayer播放音乐时加入进度条,进度条如今用的是android自带的seekbar,后期会跟换UI的,在之前可以播放音乐的基础上,如今加入的主要功能有两个: 1实时显示播放进度 2手动调节播放进度 如今学渣新建了一个项目来进行測试,后期会和之前博客介绍的滑动页面进行整合,预计会在service建好后整合,敬请期待.... 好了先上效果图: 关于使用进度条的基本原理非常easy,用到了几个參数: 1 歌曲的时长:单位为毫秒,MediaPlayer的getDurat

Android开发---MediaPlayer简单音乐播放器

Android开发-MediaPlayer简单音乐播放器 功能介绍 实现一个简单的播放器,类似网易云音乐形式,功能包括: 播放.暂停,停止,退出功能: 后台播放功能: 进度条显示播放进度.拖动进度条改变进度功能: 播放时图片旋转,显示当前播放时间功能: 界面样式 功能实现 1. MediaPlayer的实现 MediaPlayer常用方法介绍 MediaPlayer的实现包括初始化MediaPlayer,MediaPlayer的功能实现,包括播放.暂停.停止.离开等,具体细节如下: MediaP

Android Mediaplayer本地音乐播放器(绑定服务)

本文章介绍MediaPlayer本地音乐播放器,而当应用程序不再位于前台且没有正在使用它的活动时,为了确保音频继续播放,我们需要建立一个服务Service. Activity与绑定服务Service之间的交互是本文章的重点(这里需要说明一点的是,Activity不能直接访问服务对象中的方法,所以才有了我们一下的介绍,这也是为服务的安全等方面的考虑). 直接上代码: 布局文件:activity_main: <LinearLayout xmlns:android="http://schemas

delphi中使用mediaplayer控件播放音乐

新建一个名字为media的文件夹,把要播放的音乐文件放在这个文件夹里. ExtractFilePath是用来获得产生的可执行程式所在的路径,因为我们把要播放的音乐文件放在了可执行程式的那个根目录下. procedure TForm1.MediaPlayer_Play; var mediapath,v_BaseDir:string;begin    v_BaseDir := ExtractFilePath(Application.ExeName);   SetCurrentDir(v_BaseDi

从零开始学android&lt;Mediaplayer播放器组件(播放音频).四十八.&gt;

在win计算机中播放视频和音频往往会使用到计算机当中的windowsMediaPlayer播放器,而在Android中则同样会使用mediaplayer播放器对音频和视频进行播放. 下图是mediaplayer的生命周期 dle状态:当使用关键字new实例化一个MediaPlayer对象或者是调用了类中的reset()方法会进入到此状态: End状态:当调用release()方法之后将进入到此状态,此时会释放掉所有占用的硬件和软件资源,并且不会再进入到其他的任何一种状态了: Initialize

Qt Quick 多媒体 - 播放音乐和视频

MediaPlayer 是 QML 提供的核心多媒体类,可以播放音频.视频.要使用 MediaPlayer,需要引入 QtMultimedia 模块,在 QML 文档的开始加入 "import QtMultimedia 5.0" 语句.QML 中的 MediaPlayer 是 Qt C++ 中的多媒体框架在 QML 环境中的代言人,假如以 Qt QuickApp 为模板创建项目,你还需要在 pro 文件中加入语句:QT += multimedia. 一.播放音乐 先看最简单的播放音乐的