Android多媒体(音乐播放器)

来源:互联网 发布:淘宝详情图怎么加链接 编辑:程序博客网 时间:2024/04/30 22:47

activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.zking.administrator.g160628_android27_palymeusic.MainActivity">    <SeekBar        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/sb_main_bar"/>    <ImageButton        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@android:drawable/ic_media_play"        android:onClick="PlayOrPause"/></LinearLayout>

1.手机内存(应用内)
public class MainActivity extends AppCompatActivity {    private MediaPlayer mediaplayer;    private SeekBar sb_main_bar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sb_main_bar = (SeekBar) findViewById(R.id.sb_main_bar);        /**         * 给进度条设置滑动监听         * 一定要在滑完之后才能放,         * 如果你是在onProgressChanged里开始做,就会实现DJ的效果         */        sb_main_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {            @Override//进度条改变            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {            }            @Override//开始滑            public void onStartTrackingTouch(SeekBar seekBar) {            }            @Override//停止滑            public void onStopTrackingTouch(SeekBar seekBar) {                //获取当前进度条的位置                int currentPosition=seekBar.getProgress();                //跳转到某个位置进行播放                mediaplayer.seekTo(currentPosition);            }        });    }    public void PlayOrPause(View view){        //把view强转为ImageButton        ImageButton imageButton= (ImageButton) view;        //实例化MediaPlayer        //第一次进入判断mediaplayer为空就执行操作        if(mediaplayer==null){            mediaplayer = MediaPlayer.create(this, R.raw.s8);            //开始            mediaplayer.start();            //暂停图标            imageButton.setImageResource(android.R.drawable.ic_media_pause);            //音乐只要一播放,获取音乐的播放时长            int time=mediaplayer.getDuration();            //设置进度条的最大值为音乐的播放时长            sb_main_bar.setMax(time);            new MyThread().start();        }else if(mediaplayer.isPlaying()){            //如果正在播放mediaplayer.isPlaying()暂停            //暂停            mediaplayer.pause();            //播放图标            imageButton.setImageResource(android.R.drawable.ic_media_play);        }else{            //如果你没用播放它会重新开始,如果是暂停的状态你点start就会接着放            //在这里没有所谓的接着放的方法            mediaplayer.start();            //暂停图标            imageButton.setImageResource(android.R.drawable.ic_media_pause);        }    }    //要让进度条动起来就要用到子线程    class MyThread extends Thread{        @Override        public void run() {            super.run();            //第一种:拿到进度条的当前进度,如果它小于最大值            while(sb_main_bar.getProgress()<sb_main_bar.getMax()){                //循环一次,获取音乐当前的播放位置                int currentPosition=mediaplayer.getCurrentPosition();                //音乐播放到这里进度条也设置到哪里                sb_main_bar.setProgress(currentPosition);            }        }    }}

2.内存卡
public class MainActivity extends AppCompatActivity {    private MediaPlayer mediaplayer;    private SeekBar sb_main_bar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sb_main_bar = (SeekBar) findViewById(R.id.sb_main_bar);        /**         * 给进度条设置滑动监听         * 一定要在滑完之后才能放,         * 如果你是在onProgressChanged里开始做,就会实现DJ的效果         */        sb_main_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {            @Override//进度条改变            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {            }            @Override//开始滑            public void onStartTrackingTouch(SeekBar seekBar) {            }            @Override//停止滑            public void onStopTrackingTouch(SeekBar seekBar) {                //获取当前进度条的位置                int currentPosition=seekBar.getProgress();                //跳转到某个位置进行播放                mediaplayer.seekTo(currentPosition);            }        });    }    public void PlayOrPause(View view){        //把view强转为ImageButton        ImageButton imageButton= (ImageButton) view;        //实例化MediaPlayer        //第一次进入判断mediaplayer为空就执行操作        if(mediaplayer==null){            //播放内存卡里的音频            //内存卡的路径            if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){                String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();                mediaplayer=new MediaPlayer();                //设置音频流的类型                mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);                //设置音源                try {                    mediaplayer.setDataSource(this, Uri.parse("file://"+sdPath+"/s8.mp3"));                    //播放内存卡里的音频,它需要准备一下才会播放(缓冲一下)                    mediaplayer.prepare();                } catch (IOException e) {                    e.printStackTrace();                }                mediaplayer.start();                //暂停图标                imageButton.setImageResource(android.R.drawable.ic_media_pause);                //音乐只要一播放,获取音乐的播放时长                int time=mediaplayer.getDuration();                //设置进度条的最大值为音乐的播放时长                sb_main_bar.setMax(time);                new MyThread().start();            }        }else if(mediaplayer.isPlaying()){            //如果正在播放mediaplayer.isPlaying()暂停            //暂停            mediaplayer.pause();            //播放图标            imageButton.setImageResource(android.R.drawable.ic_media_play);        }else{            //如果你没用播放它会重新开始,如果是暂停的状态你点start就会接着放            //在这里没有所谓的接着放的方法            mediaplayer.start();            //暂停图标            imageButton.setImageResource(android.R.drawable.ic_media_pause);        }    }    //要让进度条动起来就要用到子线程    class MyThread extends Thread{        @Override        public void run() {            super.run();            //第一种:拿到进度条的当前进度,如果它小于最大值            while(sb_main_bar.getProgress()<sb_main_bar.getMax()){                //循环一次,获取音乐当前的播放位置                int currentPosition=mediaplayer.getCurrentPosition();                //音乐播放到这里进度条也设置到哪里                sb_main_bar.setProgress(currentPosition);            }        }    }}
AndroidManifest.xml
<!--播放内存卡里的音频用到的权限-->    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

3.网络
public class MainActivity extends AppCompatActivity {    private MediaPlayer mediaplayer;    private SeekBar sb_main_bar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sb_main_bar = (SeekBar) findViewById(R.id.sb_main_bar);        /**         * 给进度条设置滑动监听         * 一定要在滑完之后才能放,         * 如果你是在onProgressChanged里开始做,就会实现DJ的效果         */        sb_main_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {            @Override//进度条改变            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {            }            @Override//开始滑            public void onStartTrackingTouch(SeekBar seekBar) {            }            @Override//停止滑            public void onStopTrackingTouch(SeekBar seekBar) {                //获取当前进度条的位置                int currentPosition=seekBar.getProgress();                //跳转到某个位置进行播放                mediaplayer.seekTo(currentPosition);            }        });    }    public void PlayOrPause(View view){        //把view强转为ImageButton        final ImageButton imageButton= (ImageButton) view;        //实例化MediaPlayer        //第一次进入判断mediaplayer为空就执行操作        if(mediaplayer==null){            if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {                String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();                mediaplayer = new MediaPlayer();                //设置音频流的类型                mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);                //设置音源                try {                    mediaplayer.setDataSource(this, Uri.parse("http://193.168.4.247:8080/s8.mp3"));                    //网络音乐要用异步准备                    mediaplayer.prepareAsync();                } catch (IOException e) {                    e.printStackTrace();                }                //设置准备监听                mediaplayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {                    @Override//准备的                    public void onPrepared(MediaPlayer mp) {                        mediaplayer.start();                        //暂停图标                        imageButton.setImageResource(android.R.drawable.ic_media_pause);                        //音乐只要一播放,获取音乐的播放时长                        int time = mediaplayer.getDuration();                        //设置进度条的最大值为音乐的播放时长                        sb_main_bar.setMax(time);                        new MyThread().start();                    }                });            }        }else if(mediaplayer.isPlaying()){            //如果正在播放mediaplayer.isPlaying()暂停            //暂停            mediaplayer.pause();            //播放图标            imageButton.setImageResource(android.R.drawable.ic_media_play);        }else{            //如果你没用播放它会重新开始,如果是暂停的状态你点start就会接着放            //在这里没有所谓的接着放的方法            mediaplayer.start();            //暂停图标            imageButton.setImageResource(android.R.drawable.ic_media_pause);        }    }    //要让进度条动起来就要用到子线程    class MyThread extends Thread{        @Override        public void run() {            super.run();            //第一种:拿到进度条的当前进度,如果它小于最大值            while(sb_main_bar.getProgress()<sb_main_bar.getMax()){                //循环一次,获取音乐当前的播放位置                int currentPosition=mediaplayer.getCurrentPosition();                //音乐播放到这里进度条也设置到哪里                sb_main_bar.setProgress(currentPosition);            }        }    }}

AndroidManifest.xml

    <!--网络权限-->    <uses-permission android:name="android.permission.INTERNET"></uses-permission>