标签:
1 编写以下案例:
当点击了”播放”之后,在手机上的/mnt/sdcard2/natural.mp3就会播放。
2 编写布局文件activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" >
<EditText android:id="@+id/et_path" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入要播放文件的路径" />
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" >
<Button android:id="@+id/bt_play" android:onClick="play" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="播放" /> <Button android:id="@+id/bt_pause" android:onClick="pause" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="暂停" /> <Button android:id="@+id/bt_stop" android:onClick="stop" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="停止" /> <Button android:id="@+id/bt_replay" android:onClick="replay" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="重播" /> </LinearLayout>
</LinearLayout> |
3 编写MainActivity
package com.itheima.musicplayer;
import java.io.File; import java.io.IOException;
import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;
public class MainActivity extends Activity { private EditText et_path;
private MediaPlayer mediaPlayer;
private Button bt_play,bt_pause,bt_stop,bt_replay;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_path = (EditText) findViewById(R.id.et_path); bt_play = (Button) findViewById(R.id.bt_play); bt_pause = (Button) findViewById(R.id.bt_pause); bt_stop = (Button) findViewById(R.id.bt_stop); bt_replay = (Button) findViewById(R.id.bt_replay); } /** * 播放 * @param view */ public void play(View view) { String filepath = et_path.getText().toString().trim(); File file = new File(filepath); if(file.exists()){ try { mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(filepath);//设置播放的数据源。 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。 mediaPlayer.start(); bt_play.setEnabled(false); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { bt_play.setEnabled(true); } }); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "播放失败", 0).show(); } }else{ Toast.makeText(this, "文件不存在,请检查文件的路径", 0).show(); } } /** * 暂停 * @param view */ public void pause(View view) { if("继续".equals(bt_pause.getText().toString())){ mediaPlayer.start(); bt_pause.setText("暂停"); return; } if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ //这里表示的是暂停功能 mediaPlayer.pause(); bt_pause.setText("继续"); } }
/** * 停止 * @param view */ public void stop(View view) { if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ //通过stop方法停止播放音乐 mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } bt_pause.setText("暂停"); bt_play.setEnabled(true); } /** * 重播 * @param view */ public void replay(View view) { if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ //通过seekTo方法指定到某个位置播放音乐 mediaPlayer.seekTo(0); }else{ play(view); } bt_pause.setText("暂停"); } } |
如果想播放网络上的音乐,需要把上面的play代码改成:
/** * 播放 * * @param view */ public void play(View view) { String filepath = et_path.getText().toString().trim(); // http:// if (filepath.startsWith("http://")) { try { mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(filepath);// 设置播放的数据源。 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); // mediaPlayer.prepare();//同步的准备方法。 mediaPlayer.prepareAsync();// 异步的准备 mediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); bt_play.setEnabled(false); } }); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { bt_play.setEnabled(true); } }); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "播放失败", 0).show(); } } else { Toast.makeText(this, "请检查文件的路径", 0).show(); } } |
==============================================================================
视频播放器,实现”播放”、“暂停”、”停止”、“重播”。案例截图如下:
播放布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" >
<EditText android:id="@+id/et_path" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入要播放文件的路径" />
<SeekBar android:id="@+id/seekBar1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" >
<Button android:id="@+id/bt_play" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="play" android:text="播放" />
<Button android:id="@+id/bt_pause" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="pause" android:text="暂停" />
<Button android:id="@+id/bt_stop" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="stop" android:text="停止" />
<Button android:id="@+id/bt_replay" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="replay" android:text="重播" /> </LinearLayout>
<SurfaceView android:id="@+id/sv" android:layout_width="fill_parent" android:layout_height="fill_parent" />
</LinearLayout> |
编写MainActivity,代码如下:
package com.itheima.musicplayer;
import java.io.File; import java.io.IOException; import java.util.Timer; import java.util.TimerTask;
import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.Toast;
public class MainActivity extends Activity { private EditText et_path; private MediaPlayer mediaPlayer;
private Button bt_play,bt_pause,bt_stop,bt_replay;
private SurfaceView sv; private SurfaceHolder holder;
private int position; private String filepath;
private SeekBar seekBar1;
private Timer timer; private TimerTask task;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_path = (EditText) findViewById(R.id.et_path); bt_play = (Button) findViewById(R.id.bt_play); bt_pause = (Button) findViewById(R.id.bt_pause); bt_stop = (Button) findViewById(R.id.bt_stop); bt_replay = (Button) findViewById(R.id.bt_replay);
seekBar1 = (SeekBar) findViewById(R.id.seekBar1); seekBar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override public void onStopTrackingTouch(SeekBar seekBar) { int postion = seekBar.getProgress(); mediaPlayer.seekTo(postion); }
@Override public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
} });
//得到surfaceview sv = (SurfaceView) findViewById(R.id.sv); //得到显示界面内容的容器 holder = sv.getHolder(); //在低版本模拟器上运行记得加上下面的参数。不自己维护双缓冲区,而是等待多媒体播放框架主动的推送数据。 holder. holder.addCallback(new Callback() {
@Override public void surfaceDestroyed(SurfaceHolder holder) { System.out.println("destoryed"); if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ position = mediaPlayer.getCurrentPosition(); mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; timer.cancel(); task.cancel(); timer = null; task = null; } }
@Override public void surfaceCreated(SurfaceHolder holder) { System.out.println("created"); if(position>0){//记录的有播放进度。 try { mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(filepath);//设置播放的数据源。 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDisplay(holder); mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。 mediaPlayer.start(); mediaPlayer.seekTo(position); bt_play.setEnabled(false); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { bt_play.setEnabled(true); } }); int max = mediaPlayer.getDuration(); seekBar1.setMax(max); timer = new Timer(); task = new TimerTask() { @Override public void run() { seekBar1.setProgress(mediaPlayer.getCurrentPosition()); } }; timer.schedule(task, 0, 500); } catch (IOException e) { e.printStackTrace(); } } }
@Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { System.out.println("changed"); } }); }
/** * 播放 * @param view */ public void play(View view) { filepath = et_path.getText().toString().trim(); File file = new File(filepath); if(file.exists()){ try { mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(filepath);//设置播放的数据源。 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDisplay(holder); mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。 mediaPlayer.start(); //设置拖动进度条的最大值 int max = mediaPlayer.getDuration(); seekBar1.setMax(max); timer = new Timer(); task = new TimerTask() { @Override public void run() { seekBar1.setProgress(mediaPlayer.getCurrentPosition()); } }; timer.schedule(task, 0, 500);
bt_play.setEnabled(false); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { bt_play.setEnabled(true); } }); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "播放失败", 0).show(); } }else{ Toast.makeText(this, "文件不存在,请检查文件的路径", 0).show(); } } /** * 暂停 * @param view */ public void pause(View view) { if("继续".equals(bt_pause.getText().toString())){ mediaPlayer.start(); bt_pause.setText("暂停"); return; } if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ mediaPlayer.pause(); bt_pause.setText("继续"); } }
/** * 停止 * @param view */ public void stop(View view) { if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } bt_pause.setText("暂停"); bt_play.setEnabled(true); }
/** * 重播 * @param view */ public void replay(View view) { if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ mediaPlayer.seekTo(0); }else{ play(view); } bt_pause.setText("暂停"); } } |
网络视频播放器,编写布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" >
<EditText android:id="@+id/et_path" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入要播放文件的路径"/>
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" >
<Button android:id="@+id/bt_play" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="play" android:text="播放" />
<Button android:id="@+id/bt_pause" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="pause" android:text="暂停" />
<Button android:id="@+id/bt_stop" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="stop" android:text="停止" />
<Button android:id="@+id/bt_replay" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="replay" android:text="重播" /> </LinearLayout>
<SurfaceView android:id="@+id/sv" android:layout_width="fill_parent" android:layout_height="fill_parent" />
</LinearLayout> |
编写MainActivity
package com.itheima.musicplayer;
import java.io.File; import java.io.IOException;
import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;
public class MainActivity extends Activity { private EditText et_path;
private MediaPlayer mediaPlayer;
private Button bt_play,bt_pause,bt_stop,bt_replay;
private SurfaceView sv; private SurfaceHolder holder;
private int position; private String filepath;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_path = (EditText) findViewById(R.id.et_path); bt_play = (Button) findViewById(R.id.bt_play); bt_pause = (Button) findViewById(R.id.bt_pause); bt_stop = (Button) findViewById(R.id.bt_stop); bt_replay = (Button) findViewById(R.id.bt_replay); //得到surfaceview sv = (SurfaceView) findViewById(R.id.sv); //得到显示界面内容的容器 holder = sv.getHolder(); //在低版本模拟器上运行记得加上下面的参数。不自己维护双缓冲区,而是等待多媒体播放框架主动的推送数据。 holder. holder.addCallback(new Callback() {
@Override public void surfaceDestroyed(SurfaceHolder holder) { System.out.println("destoryed"); if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ position = mediaPlayer.getCurrentPosition(); mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } }
@Override public void surfaceCreated(SurfaceHolder holder) { System.out.println("created"); if(position>0){//记录的有播放进度。 try { mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(filepath);//设置播放的数据源。 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDisplay(holder); mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。 mediaPlayer.start(); mediaPlayer.seekTo(position); bt_play.setEnabled(false); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { bt_play.setEnabled(true); } }); } catch (IOException e) { e.printStackTrace(); } } }
@Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { System.out.println("changed"); } });
} /** * 播放 * @param view */ public void play(View view) { filepath = et_path.getText().toString().trim(); //File file = new File(filepath); if(filepath.startsWith("http://")){ try { mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(filepath);//设置播放的数据源。 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDisplay(holder); mediaPlayer.prepare();//准备开始播放 播放的逻辑是c代码在新的线程里面执行。 mediaPlayer.start(); bt_play.setEnabled(false); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { bt_play.setEnabled(true); } }); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "播放失败", 0).show(); } }else{ Toast.makeText(this, "文件不存在,请检查文件的路径", 0).show(); } } /** * 暂停 * @param view */ public void pause(View view) { if("继续".equals(bt_pause.getText().toString())){ mediaPlayer.start(); bt_pause.setText("暂停"); return; } if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ mediaPlayer.pause(); bt_pause.setText("继续"); } } /** * 停止 * @param view */ public void stop(View view) { if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } bt_pause.setText("暂停"); bt_play.setEnabled(true); } /** * 重播 * @param view */ public void replay(View view) { if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ mediaPlayer.seekTo(0); }else{ play(view); } bt_pause.setText("暂停"); }
} |
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima.musicplayer" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <!-- 注意如果涉及到网络的都要添加上下面的一句 --> <uses-permission android:name="android.permission.INTERNET"/>
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.itheima.musicplayer.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
</manifest> |
版权声明:本文为博主原创文章,未经博主允许不得转载。
22_Android中的本地音乐播放器和网络音乐播放器的编写,本地视频播放器和网络视频播放器
标签:
原文地址:http://blog.csdn.net/tototuzuoquan/article/details/47051073