码迷,mamicode.com
首页 > 移动开发 > 详细

22_Android中的本地音乐播放器和网络音乐播放器的编写,本地视频播放器和网络视频播放器

时间:2015-07-25 07:12:01      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

??

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();

       }

    }

==============================================================================

  1. 视频播放器,实现播放暂停停止重播。案例截图如下:

技术分享

  1. 播放布局文件

<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>

  1. 编写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.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

       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.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

       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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!