使用的是MediaPlayer这个对象,实现的方法:
- 扫描Music的目录,把文件add到array中。
- 然后实用化MediaPlayer对象。
- 接着实现start、stop、pause、next等播放方法。
播放的方法:
uri = Uri.parse("/mnt/sdcard/Music/1.MP3"); try { mp.setDataSource(mContext, uri); mp.prepare(); } catch (IOException e) { e.printStackTrace(); } mp.start();
暂停的方法:
mp.pause();
停止的方法:
mp.stop();
下一首的方法:
mp.reset(); uri = Uri.parse("/mnt/sdcard/Music/2.MP3"); try { mp.setDataSource(mContext, uri); mp.prepare(); } catch (IOException e) { e.printStackTrace(); } mp.start();
以下是整个文件的代码:
package com.test.testmedia; import android.annotation.TargetApi; import android.content.Context; import android.media.MediaPlayer; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.Button; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends AppCompatActivity { private static final String TAG = "MediaLog"; Button start,stop,pause,start2,stop2,pause2; MediaPlayer mp; Uri uri; Context mContext; Timer timer; TimerTask tt; HandlerEx handler; Bundle bundle; int audiolenth = -1; int MediaPlayerstate = -1; private ArrayList<String> music = new ArrayList<String>(); int pos = -1; public class HandlerEx extends Handler{ public void handleMessage(Message msg) { if(msg.what == 1){ if(bundle.containsKey("title")){ Log.i(TAG,bundle.getString("title")); setTitle(bundle.getString("title")); } } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); findid(); init(); } private void findid() { start = (Button)findViewById(R.id.Start); stop = (Button)findViewById(R.id.Stop); pause = (Button)findViewById(R.id.Pause); start2 = (Button)findViewById(R.id.start2); stop2 = (Button)findViewById(R.id.stop2); pause2 = (Button)findViewById(R.id.pause2); mContext = this; mp = new MediaPlayer(); bundle = new Bundle(); timer = new Timer(); tt = new TimerTask() { @Override public void run() { Message msg = handler.obtainMessage(); msg.what=1; switch (MediaPlayerstate){ case 1: bundle.putString("title","正在播放:" + (int) (mp.getCurrentPosition() / 1000) + "/" + audiolenth); break; case 2: bundle.putString("title","已停止"); break; case 3: bundle.putString("title","已暂停"); break; default: bundle.putString("title",getString(R.string.app_name)); break; } handler.sendMessage(msg); } }; timer.schedule(tt,0,1000); handler = new HandlerEx(); getFils("/mnt/sdcard/Music/", ".mp3", true); } /** * 搜索文件 * @param path 如:/mnt/sdcard/Music/ * @param suffix 单个请使用.mp3,多个如:.mp3;.log * @param isSon 是否包含子目录 */ private void getFils(String path,String suffix,boolean isSon){ File[] files = new File(path).listFiles(); for (int i = 0; i < files.length; i++){ File f = files[i]; if(f.isFile()){ String _name = f.getPath(); String _suf = _name.substring(_name.lastIndexOf(".")).toLowerCase(); suffix = suffix.toLowerCase(); if(suffix.indexOf(_suf) != -1 ){ Log.i(TAG,_name); music.add(_name); } if(!isSon) break; }else if (f.isDirectory() && f.getPath().indexOf("/.") == -1){ getFils(f.getPath(),suffix,isSon); } } } private String getMp3(){ pos++; if(pos >= music.size()) pos = -1; return music.get(pos); } private void init() { start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (start.getText().equals(getString(R.string.start))) { start.setText(getString(R.string.next)); } else { mp.reset(); } String u = getMp3(); Log.i(TAG, u); uri = Uri.parse(u); try { mp.setDataSource(mContext, uri); mp.prepare(); } catch (IOException e) { e.printStackTrace(); } mp.start(); audiolenth = (int) mp.getDuration() / 1000; MediaPlayerstate = 1; } }); stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mp.stop(); mp.reset(); MediaPlayerstate = 2; } }); pause.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (pause.getText().equals(getString(R.string.pause))) { MediaPlayerstate = 3; mp.pause(); pause.setText(getString(R.string.play)); } else { MediaPlayerstate = 1; mp.start(); pause.setText(getString(R.string.pause)); } } }); mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { Log.i(TAG, "setOnCompletionListener"); mp.reset(); MediaPlayerstate = -1; start.callOnClick(); } }); mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { Log.i(TAG, "setOnPreparedListener:" + mp.getDuration()); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }