Android简单实现音乐播放器

来源:互联网 发布:js数组的romove 编辑:程序博客网 时间:2024/05/21 08:56

Android老师的小作业。让使用Android的service实现音乐播放器。话不多说,直接上代码

首先你要有一个主MainActivity

package com.example.musicplayer;import org.w3c.dom.Text;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.text.TextUtils;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.EditText;import android.widget.SeekBar;import android.widget.Toast;import com.example.musicplayer.MusicSevice.MyBinder;public class MainActivity extends Activity implements OnClickListener {private EditText path;private Intent intent;private myConn conn;MyBinder binder;private SeekBar mSeekBar;private Thread mThread;private Handler handler=new Handler(){public void handleMessage(android.os.Message msg){switch(msg.what){case 100:int currentPosition=(Integer) msg.obj;mSeekBar.setProgress(currentPosition);break;default:break;}}};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                path=(EditText) findViewById(R.id.et_inputpath);        findViewById(R.id.bt_play).setOnClickListener(this);        findViewById(R.id.bt_pause).setOnClickListener(this);        findViewById(R.id.bt_replay).setOnClickListener(this);        findViewById(R.id.bt_stop).setOnClickListener(this);        mSeekBar=(SeekBar) findViewById(R.id.seekBar1);        conn=new myConn();        intent=new Intent(this,MusicSevice.class);        bindService(intent, conn, BIND_AUTO_CREATE);                    }            //初始化进度条长度,获取音乐文件长度    private void initSeekBar(){    int musicWidth=binder.getMusicWidth();    mSeekBar.setMax(musicWidth);    }        //更新音乐播放进度    private void updateProgress(){    mThread=new Thread(){    public void run(){    while(!interrupted()){    //调用服务中的获取当前播放进度    int currentPosition =binder.getCurrentPosition();    Message message=Message.obtain();    message.obj=currentPosition;    message.what=100;    handler.sendMessage(message);    }    }    };    mThread.start();    }        private class myConn implements ServiceConnection{@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {binder=(MyBinder) service;}@Overridepublic void onServiceDisconnected(ComponentName arg0) {// TODO Auto-generated method stub}        }    @Overridepublic void onClick(View v) {String pathway=path.getText().toString().trim();String path="data/data/com.example.musicplayer/1.mp3";switch (v.getId()) {case R.id.bt_play:if(!TextUtils.isEmpty(path)){binder.palys(path);initSeekBar();updateProgress();}else{Toast.makeText(this, "找不到音乐文件", 0).show();}break;case R.id.bt_pause:binder.pauses();break;case R.id.bt_replay:binder.repalys(pathway);break;case R.id.bt_stop:mThread.interrupt();if(mThread.isInterrupted()){binder.stops();}default:break;}}    protected void onDestory(){    if(mThread!=null){    if(!mThread.isInterrupted()){    mThread.interrupt();    }    }    unbindService(conn);    super.onDestroy();    }}

然后你要有一个service,叫MusicService,

package com.example.musicplayer;import android.annotation.SuppressLint;import android.app.Service;import android.content.Intent;import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnPreparedListener;import android.os.Binder;import android.os.IBinder;import android.util.Log;import android.widget.Toast;public class MusicSevice extends Service{private static final String TAG="MusicService";public MediaPlayer mediaPlayer;class MyBinder extends Binder{public void palys(String path){play(path);}public void pauses(){pause();}public void repalys(String path){replay(path);}public void stops(){stop();}public int getCurrentPosition(){return getCurrenProgress();}public int getMusicWidth(){return getMusicLength();}}public void onCreate(){super.onCreate();}@SuppressLint("NewApi")private void play(String path) {try{if(mediaPlayer == null){Log.i(TAG,"开始播放音乐");//创建一个MediaPlayer播放器mediaPlayer=new MediaPlayer();//指定参数为音频文件mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//指定播放路径mediaPlayer.setDataSource(path);//准备播放mediaPlayer.prepare();mediaPlayer.setOnPreparedListener(new OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {mediaPlayer.start();}});}else{int position =getCurrenProgress();mediaPlayer.seekTo(position);try{mediaPlayer.prepare();}catch(Exception e){e.printStackTrace();}mediaPlayer.start();}}catch(Exception e){e.printStackTrace();}}//暂停音乐public void pause(){if(mediaPlayer != null && mediaPlayer.isPlaying()){Log.i(TAG, "暂停播放");mediaPlayer.pause();}else if(mediaPlayer !=null && (!mediaPlayer.isPlaying())){mediaPlayer.start();}}//重新播放public void replay(String path){if(mediaPlayer!=null){Log.i(TAG, "重新开始播放");mediaPlayer.seekTo(0);try{mediaPlayer.prepare();}catch(Exception e){e.printStackTrace();}mediaPlayer.start();}}//停止播放public void stop() {if(mediaPlayer != null){Log.i(TAG, "停止播放");mediaPlayer.stop();mediaPlayer.release();mediaPlayer=null;}else{Toast.makeText(getApplicationContext(), "已停止", 0).show();}}//获取文件资源长度public int getMusicLength(){if(mediaPlayer != null){return mediaPlayer.getDuration();}return 0;}//获取当前进度public int getCurrenProgress(){try{if(mediaPlayer !=null){if(mediaPlayer.isPlaying()){Log.i(TAG, "获取当前进度");return mediaPlayer.getCurrentPosition();}else if(!mediaPlayer.isPlaying()){return mediaPlayer.getCurrentPosition();}}}catch(Exception e){e.printStackTrace();}return 0;}public void onDestroy(){if(mediaPlayer !=null){mediaPlayer.stop();mediaPlayer.release();mediaPlayer=null;}super.onDestroy();}@Overridepublic IBinder onBind(Intent arg0) {return new MyBinder();}}


当然,你至少要有一个主样式文件,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_inputpath"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="data/data/com.example.musicplayer/1.mp3"/>        <SeekBar android:id="@+id/seekBar1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginBottom="10dp"        android:layout_marginTop="20dp"/>    <LinearLayout android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"        android:layout_gravity="center_horizontal"        android:gravity="center">                <TextView android:id="@+id/bt_play"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="播放"            android:gravity="center"            android:drawableTop="@android:drawable/ic_media_play"            android:drawablePadding="3dp"/>                <TextView android:id="@+id/bt_pause"            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="wrap_content"            android:drawableTop="@android:drawable/ic_media_pause"            android:drawablePadding="3dp"            android:gravity="center"            android:text="暂停"/>        <TextView android:id="@+id/bt_replay"            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="wrap_content"            android:drawableTop="@android:drawable/ic_media_play"            android:drawablePadding="3dp"            android:gravity="center"            android:text="重播"/>        <TextView android:id="@+id/bt_stop"            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="wrap_content"            android:drawableTop="@android:drawable/ic_media_pause"            android:drawablePadding="3dp"            android:gravity="center"            android:text="停止"/>                </LinearLayout>            <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" /></LinearLayout>


最后别忘了注册你的activity和service,注册文件如下

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.musicplayer"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="18" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.example.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>                <service android:name="com.example.musicplayer.MusicSevice"></service>    </application></manifest>


当然还有可能因为Android sdk版本的问题出现点小毛病,这里推荐使用Android 19


在向虚拟机导入音乐之前,你要先有一首不错的音乐,推荐一首请点击连接下载点击打开链接


使用eclipse-adt导入音乐文件


最终效果图

以上是本文的全部内容,谢谢观看

原创粉丝点击