Android简单实现音乐播放器
2017-11-21 21:31
225 查看
Android老师的小作业。让使用Android的service实现音乐播放器。话不多说,直接上代码
首先你要有一个主MainActivity
然后你要有一个service,叫MusicService,
当然,你至少要有一个主样式文件,activity_main.xml
最后别忘了注册你的activity和service,注册文件如下
当然还有可能因为Android sdk版本的问题出现点小毛病,这里推荐使用Android 19
在向虚拟机导入音乐之前,你要先有一首不错的音乐,推荐一首请点击连接下载点击打开链接
使用eclipse-adt导入音乐文件
最终效果图
以上是本文的全部内容,谢谢观看
首先你要有一个主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{ @Override public void onServiceConnected(ComponentName name, IBinder service) { binder=(MyBinder) service; } @Override public void onServiceDisconnected(ComponentName arg0) { // TODO Auto-generated method stub } } @Override public 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() { @Override public 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(); } @Override public 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"/> 974e <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导入音乐文件
最终效果图
以上是本文的全部内容,谢谢观看
相关文章推荐
- Android——用Activity和Service实现简单的音乐播放器
- Android中实现一个简单音乐播放器
- Android 初步学习BroadCast与Service实现简单的音乐播放器
- Android如何实现简单音乐播放器的代码
- 简单实现Android本地音乐播放器
- 通过一个简单的音乐播放器探讨 Android Aidl 的实现原理
- android 音乐播放器最简单的实现
- android 简单的音乐播放器实现播放模式的切换
- Android 超简单音乐播放器(十)歌词的实现
- android快捷简单的实现音乐播放器
- Android开发6:Service的使用(简单音乐播放器的实现)
- Android简单的实现音乐播放器功能(一个按钮可相应两个事件的方法)
- Android 超简单音乐播放器(四)广告栏的实现
- android简单实现音乐播放器
- Android 实现简单的音乐播放器效果(音频文件的三种存放)
- android实现简单的音乐播放器
- android 音乐播放器简单实现
- android快捷简单的实现音乐播放器
- Android开发6:Service的使用(简单音乐播放器的实现)
- Android 实现简单音乐播放器(一)