为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Android-MediaPlayer(实现列表选歌下一首,上一首,清空播放列表,搜索本地音乐文件)

2017-12-27 18页 doc 43KB 74阅读

用户头像

is_482581

暂无简介

举报
Android-MediaPlayer(实现列表选歌下一首,上一首,清空播放列表,搜索本地音乐文件)Android-MediaPlayer(实现列表选歌下一首,上一首,清空播放列表,搜索本地音乐文件) Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件) 下载链接: MediaPlayerActivity类: package com.vince.media; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; i...
Android-MediaPlayer(实现列表选歌下一首,上一首,清空播放列表,搜索本地音乐文件)
Android-MediaPlayer(实现列表选歌下一首,上一首,清空播放列表,搜索本地音乐文件) Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件) 下载链接: MediaPlayerActivity类: package com.vince.media; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import android.app.Activity; import android.app.ProgressDialog; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageButton; import android.widget.ListView; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.Toast; public class MediaPlayerActivity extends Activity implements OnCompletionListener,OnErrorListener,OnSeekBarChangeListener,OnItemClickListener ,Runnable{ protected static final int SEARCH_MUSIC_SUCCESS = 0;// 搜索成功标记 private SeekBar seekBar; private ListView listView; private ImageButton btnPlay; private TextView tv_currTime,tv_totalTime,tv_showName; private List String list; private ProgressDialog pd; // 进度条对话框 private MusicListAdapter ma;// 适配器 private MediaPlayer mp; private int currIndex = 0;// 表示当前播放的音乐索引 private boolean flag = true;//控制进度条线程标记 // 定义当前播放器的状态?, private static final int IDLE = 0; private static final int PAUSE = 1; private static final int START = 2; private static final int CURR_TIME_VALUE = 1; private int currState = IDLE; // 当前播放器的状态 //定义线程池(同时只能有一个线程运行) ExecutorService es = Executors.newSingleThreadExecutor(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mediaplayer_layout); list = new ArrayList String (); mp = new MediaPlayer(); mp.setOnCompletionListener(this); mp.setOnErrorListener(this); initView(); } @Override protected void onDestroy() { if (mp != null) { mp.stop(); flag= false; //释放资源 mp.release(); } super.onDestroy(); } /** * 初始化UI组件 */ private void initView() { btnPlay = (ImageButton) findViewById(R.id.media_play); seekBar = (SeekBar) findViewById(R.id.seekBar1); seekBar.setOnSeekBarChangeListener(this); listView = (ListView) findViewById(R.id.listView1); listView.setOnItemClickListener(this); tv_currTime = (TextView) findViewById(R.id.textView1_curr_time); tv_totalTime = (TextView) findViewById(R.id.textView1_total_time); tv_showName = (TextView) findViewById(R.id.tv_showName); } @Override public boolean onCreateOptionsMenu(Menu menu) { //从xml文件中装载菜单 getMenuInflater().inflate(R.menu.media_menu, menu); return super.onCreateOptionsMenu(menu); } private Handler hander = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case SEARCH_MUSIC_SUCCESS: //搜索音乐文件结束时 ma = new MusicListAdapter(); listView.setAdapter(ma); pd.dismiss(); break; case CURR_TIME_VALUE: //设置当前时间 tv_currTime.setText(msg.obj.toString()); break; default: break; } }; }; @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { //搜索本地音乐菜单 case R.id.item1_search: list.clear(); //是否有外部存储设备 if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { pd = ProgressDialog.show(this, , 正在搜索音乐文件... , true); new Thread(new Runnable() { String[] ext = { .mp3 }; File file = Environment.getExternalStorageDirectory(); public void run() { search(file, ext); hander.sendEmptyMessage(SEARCH_MUSIC_SUCCESS); } }).start(); } else { Toast.makeText(this, 请插入外部存储设备.. , Toast.LENGTH_LONG).show(); } break; //清除播放列表菜单 case R.id.item2_clear: list.clear(); ma.notifyDataSetChanged(); break; //退出菜单 case R.id.item3_exit: flag = false; this.finish(); break; } return super.onOptionsItemSelected(item); } // 搜索音乐文件 private void search(File file, String[] ext) { if (file != null) { if (file.isDirectory()) { File[] listFile = file.listFiles(); if (listFile != null) { for (int i = 0; i listFile.length; i++) { search(listFile[i], ext); } } } else { String filename = file.getAbsolutePath(); for (int i = 0; i ext.length; i++) { if (filename.endsWith(ext[i])) { list.add(filename); break; } } } } } class MusicListAdapter extends BaseAdapter { public int getCount() { return list.size(); } public Object getItem(int position) { return list.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.list_item, null); } TextView tv_music_name = (TextView) convertView .findViewById(R.id.textView1_music_name); tv_music_name.setText(list.get(position)); return convertView; } } private void play() { switch (currState) { case IDLE: start(); break; case PAUSE: mp.pause(); btnPlay.setImageResource(R.drawable.ic_media_play); currState = START; break; case START: mp.start(); btnPlay.setImageResource(R.drawable.ic_media_pause); currState = PAUSE; } } //上一首 private void previous() { if((currIndex-1) =0){ currIndex--; start(); }else{ Toast.makeText(this, 当前已经是第一首歌曲了 , Toast.LENGTH_SHORT).show(); } } //下一自首 private void next() { if(currIndex+1 list.size()){ currIndex++; start(); }else{ Toast.makeText(this, 当前已经是最后一首歌曲了 , Toast.LENGTH_SHORT).show(); } } //开始播放 private void start() { if (list.size() 0 currIndex list.size()) { String SongPath = list.get(currIndex); mp.reset(); try { mp.setDataSource(SongPath); mp.prepare(); mp.start(); initSeekBar(); es.execute(this); tv_showName.setText(list.get(currIndex)); btnPlay.setImageResource(R.drawable.ic_media_pause); currState = PAUSE; } catch (IOException e) { e.printStackTrace(); } }else{ Toast.makeText(this, 播放列表为空 , Toast.LENGTH_SHORT).show(); } } //播放按钮 public void play(View v){ play(); } //上一首按钮 public void previous(View v){ previous(); } //下一首按钮 public void next(View v){ next(); } //监听器,当当前歌曲播放完时触发,播放下一首 public void onCompletion(MediaPlayer mp) { if(list.size() 0){ next(); }else{ Toast.makeText(this, 播放列表为空 , Toast.LENGTH_SHORT).show(); } } //当播放异常时触发 public boolean onError(MediaPlayer mp, int what, int extra) { mp.reset(); return false; } //初始化SeekBar private void initSeekBar(){ seekBar.setMax(mp.getDuration()); seekBar.setProgress(0); tv_totalTime.setText(toTime(mp.getDuration())); } private String toTime(int time){ int minute = time / 1000 / 60; int s = time / 1000 % 60; String mm = null; String ss = null; if(minute 10)mm = 0 + minute; else mm = minute + ; if(s 10)ss = 0 + s; else ss = + s; return mm + : + ss; } public void run() { flag = true; while(flag){ if(mp.getCurrentPosition() seekBar.getMax()){ seekBar.setProgress(mp.getCurrentPosition()); Message msg = hander.obtainMessage(CURR_TIME_VALUE, toTime(mp.getCurrentPosition())); hander.sendMessage(msg); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } }else{ flag = false; } } } //SeekBar监听器 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { //是否由用户改变 if(fromUser){ mp.seekTo(progress); } } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { } //ListView监听器 public void onItemClick(AdapterView ? parent, View view, int position, long id) { currIndex = position; start(); } } mediaplayer_layout.xml布局文件: ?xml version= 1.0 encoding= utf-8 ? LinearLayout xmlns:android= android:layout_width= match_parent android:layout_height= match_parent android:orientation= vertical ListView android:id= @+id/listView1 android:layout_width= match_parent android:layout_height= 0dp android:layout_weight= 1 /ListView TextView android:id= @+id/tv_showName android:layout_width= match_parent android:layout_height= wrap_content android:gravity= center / LinearLayout android:id= @+id/linearLayout2 android:layout_width= match_parent android:layout_height= wrap_content android:gravity= center TextView android:id= @+id/textView1_curr_time android:layout_width= wrap_content android:layout_height= wrap_content android:layout_marginRight= 5dp android:text= 00:00 / SeekBar android:id= @+id/seekBar1 android:layout_width= fill_parent android:layout_height= wrap_content android:layout_weight= 1 / TextView android:id= @+id/textView1_total_time android:layout_width= wrap_content android:layout_height= wrap_content android:layout_marginLeft= 5dp android:text= 00:00 / /LinearLayout LinearLayout android:id= @+id/linearLayout1 android:layout_width= match_parent android:layout_height= wrap_content android:gravity= center ImageButton android:layout_width= wrap_content android:layout_height= wrap_content android:onClick= previous android:src= @drawable/ic_media_previous / ImageButton android:id= @+id/media_play android:layout_width= wrap_content android:layout_height= wrap_content android:onClick= play android:src= @drawable/ic_media_play / ImageButton android:layout_width= wrap_content android:layout_height= wrap_content android:onClick= next android:src= @drawable/ic_media_next / /LinearLayout /LinearLayout media_menu.xml文件: ?xml version= 1.0 encoding= utf-8 ? menu xmlns:android= item android:id= @+id/item1_search android:icon= @drawable/ic_menu_search android:orderInCategory= 100 android:title= @string/search /item item android:id= @+id/item2_clear android:icon= @drawable/ic_menu_delete android:orderInCategory= 200 android:title= @string/clear_music_list /item item android:id= @+id/item3_exit android:icon= @drawable/ic_menu_close_clear_cancel android:orderInCategory= 300 android:title= @string/exit /item /menu strings.xml文件: ?xml version= 1.0 encoding= utf-8 ? resources string name= hello Hello World, MediaActivity! /string string name= app_name Media /string string name= search 搜索本地音乐 /string string name= clear_music_list 清除播放列表 /string string name= exit 退出 /string /resources 1楼 fire_work昨天 18:34 顶一下
/
本文档为【Android-MediaPlayer(实现列表选歌下一首,上一首,清空播放列表,搜索本地音乐文件)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索