27.多媒体(音乐播放器)

来源:互联网 发布:知乎 室内环保 编辑:程序博客网 时间:2024/05/01 01:53

一.多媒体-音频播放概括


二.具体代码实现如下

代码文件树状图


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"    >    <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.0版本

MainActivity.java

package com.zking.android27_playmusic;import android.media.MediaPlayer;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.ImageButton;public class MainActivity extends AppCompatActivity {    private MediaPlayer mediaPlayer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void playOrPause(View view){            ImageButton imageButton= (ImageButton) view;            //实例化MediaPlayer            if(mediaPlayer==null) {                  mediaPlayer = MediaPlayer.create(this, R.raw.s1);                  mediaPlayer.start();                  //暂停图标                  imageButton.setImageResource(android.R.drawable.ic_media_pause);            }else if(mediaPlayer.isPlaying()){//下一次点击如果正在播放                  mediaPlayer.pause();//暂停                  //播放图标                  imageButton.setImageResource(android.R.drawable.ic_media_play);            }else{//第三次播放                  mediaPlayer.start();//接着播放                  //暂停图标                  imageButton.setImageResource(android.R.drawable.ic_media_pause);            }    }}

音乐播放器2.0(应用内音频文件)

让进度条动起来  实现快进 拖动 暂停

MainActivity.java

package com.zking.android27_playmusic;import android.media.MediaPlayer;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.ImageButton;import android.widget.SeekBar;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);//获取进度条        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){            ImageButton imageButton= (ImageButton) view;            //实例化MediaPlayer            if(mediaPlayer==null) {                  mediaPlayer = MediaPlayer.create(this, R.raw.s1);                  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.pause();//暂停                  //播放图标                  imageButton.setImageResource(android.R.drawable.ic_media_play);            }else{//第三次播放                  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);            }        }    }}


音乐播放器3.0(播放内存卡中的音频文件)

先要在内存卡里面通过cmd导入音频文件,再在代码里面读出来
键盘徽标键+R-->cmd-->adb shell-->出现一个$(代表普通用户)-->ls(查看内存所有文件及文件夹)-->cd data-->ls 

-->cd /mnt/sdcard(进内存卡)-->回车-->ls 

把音乐导到内存卡里面去(图片a)(pu 往出导 push往进导)
   1.adb push 音乐名.mp3 /mnt/sdcard/s1.mp3-->回车
   2.查看有没有导进去 cd/mnt/sdcard-->回车-->ls


AndroidManifest.xml

 <!--权限:读取内存卡中的音乐-->    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
MainActivity.java
package com.zking.android27_playmusic;import android.media.AudioManager;import android.media.MediaPlayer;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.ImageButton;import android.widget.SeekBar;import java.io.IOException;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);//获取进度条        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){            ImageButton imageButton= (ImageButton) view;            //实例化MediaPlayer            if(mediaPlayer==null) {                  //mediaPlayer = MediaPlayer.create(this, R.raw.s1);//从项目里面拿音乐                  //点播放时拿到内存卡的路径(从内存卡中拿音乐)                  if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){                        String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();                        mediaPlayer=new MediaPlayer();                        //设置音频流的类型                        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);                        //设置音源(协议:file://)                        try {                            mediaPlayer.setDataSource(this, Uri.parse("file://"+sdPath+"/s1.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.pause();//暂停                  //播放图标                  imageButton.setImageResource(android.R.drawable.ic_media_play);            }else{//第三次播放                  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);            }        }    }}


音乐播放器4.0(播放网络音乐)

搭建网络环境




在浏览器中下载音乐到桌面


具体实现代码如下

AndroidManifest.xml

<!--网络音乐权限--><uses-permission android:name="android.permission.INTERNET"></uses-permission>
MainActivity.java
package com.zking.android27_playmusic;import android.media.AudioManager;import android.media.MediaPlayer;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.ImageButton;import android.widget.SeekBar;import java.io.IOException;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);//获取进度条        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){            final ImageButton imageButton= (ImageButton) view;            //实例化MediaPlayer            if(mediaPlayer==null) {                  //mediaPlayer = MediaPlayer.create(this, R.raw.s1);//从项目里面拿音乐                  //点播放时拿到内存卡的路径(从内存卡中拿音乐)                  if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){                        String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();                        mediaPlayer=new MediaPlayer();                        //设置音频流的类型                        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);                        //设置音源(协议:file://)                        try {                            //mediaPlayer.setDataSource(this, Uri.parse("file://"+sdPath+"/s1.mp3"));                            mediaPlayer.setDataSource(this, Uri.parse("http://193.168.3.181:8080/s11.mp3"));                            //mediaPlayer.prepare();                            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.pause();//暂停                  //播放图标                  imageButton.setImageResource(android.R.drawable.ic_media_play);            }else{//第三次播放                  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);            }        }    }}

了解一下





原创粉丝点击