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>
阅读全文
0 0
- Android多媒体(音乐播放器)
- Android多媒体--音乐播放器实例
- Android 多媒体中的音乐播放器编程
- android 多媒体——音乐播放器
- Android多媒体之音乐播放器
- Android 多媒体中的音乐播放器
- Android多媒体(音乐播放器)实例
- android多媒体音乐(MediaPlayer)播放器
- Android---多媒体(音乐播放器)
- Android 多媒体(音乐播放器)
- 多媒体音乐播放器
- Android 音乐播放(多媒体)
- 多媒体_音乐播放器
- 27.多媒体(音乐播放器)
- Android多媒体分析(五)音乐播放器实例
- Android多媒体分析(五)音乐播放器实例
- Android多媒体分析(五)音乐播放器实例
- Android多媒体分析(五)音乐播放器实例
- Java_基础—文件名称过滤器的概述及使用
- Oracle GI 12.2新特性: OCR和Voting Disk必须存放在ASM中
- Activity基础
- Opencv3 python学习2——视频基础
- 模板方法模式(Template Method Pattern)。
- Android多媒体(音乐播放器)
- 数据结构和算法学习笔记
- 委托的理解
- HDOJ 1869 六度分离(Floyd 和 dijkstra 算法)
- JetSon Tx1 串口使用记录
- xiaze registration
- 为什么使用 SLF4J 而不是 Log4J 来做 Java 日志
- 思维导图
- Http请求连接池