作业要求:
编写Android程序, 定义一个Service实现歌曲的播放,在Activity中可以启动或停止这个Service实现后台播放音乐功能。
总体知识点:
1.了解Service的生存周期和用服务实现线程(线程我还没弄明白..)\
2.引用Android的MediaPlayer功能播放音乐
效果图:
1.停止界面
2.播放界面
..其实就是一个按钮Onclick的不同图片显示而已。。
实现步骤:
一.制作按钮图
用画图弄四个png格式的图片,分别是play play_press pause pause_press 表示播放/暂停 与播放按下时的图片与暂停按下时的图片
然后用ps或者其他软件,将白色部分修改成透明 我PS没下好 让别人随便帮忙抠了下
设置好之后 我们把图片文件都放到工程目录下的draw文件
然后说一下selector.xml
playselector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:state_pressed="false"
android:drawable="@drawable/play" />
<item
android:state_pressed="true"
android:drawable="@drawable/play_press" />
<item
android:state_window_focused="false"
android:drawable="@drawable/play" />
</selector>
整个xml 可以作为drawable资源来使用 比如R.drawable.playselector
上面的代码表示 这个资源 在按下的时候或者默认的时候 显示那一张图片
二.使用Service
我们用MusicService来继承Service
然后重写Service的各种方法
onStart() onCreate() onDestory() onBind()等
Service 运行之后 直到使用onDestory 或者运行过程完成 又或者 对服务进行卸载(即强制停用)
三.使用MediaPlayer
为了方便读取文件,我们把一首歌放进工程目录下的res/raw文件夹,作为默认资源,方便读取
我选了GEM的偶尔 最近比较喜欢 改名成为oer.mp3
可以通过下面的语句引用,不过我们只是把他放到Service里面触发调用而已
private MediaPlayer MPlayer;
MPlayer=MediaPlayer.create(getApplicationContext(), R.raw.oer);
四.具体代码实现
1.整体类图
2.MusicService.java
package bnuz.Aquariuslt.musiclite;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.widget.Toast;
public class MusicService extends Service{
private MediaPlayer MPlayer;
@Override
public IBinder onBind(Intent intent) {
return null;
}
public boolean onUnbind(Intent intent) {
Toast.makeText(this, "停止服务" , Toast.LENGTH_SHORT).show();
MPlayer.stop();
return super.onUnbind(intent);
}
//onCreate 方法在服务还没存在的时候 被调用
public void onCreate(){
super.onCreate();
Toast.makeText(this, "首次调用onCreate方法,音乐开始播放" , Toast.LENGTH_SHORT).show();
MPlayer=MediaPlayer.create(getApplicationContext(), R.raw.oer);
}
@SuppressWarnings("deprecation")
public void onStart(Intent intent, int startId){
super.onStart(intent, startId);
Toast.makeText(this, "启动服务" , Toast.LENGTH_SHORT).show();
MPlayer.start();
}
public void onDestory(){
super.onDestroy();
MPlayer.stop();
}
}
3.Player.java
package bnuz.Aquariuslt.musiclite;
import android.os.Bundle;
import android.os.IBinder;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class Player extends Activity {
ImageButton PlayPause;
boolean PFlag = true;// true表示顯示play false 表示顯示pause
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.play);
intent=new Intent(Player.this,MusicService.class);
PlayPause = (ImageButton) this.findViewById(R.id.PlayPause);
PlayPause.setOnClickListener(ButtonPlayListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.player, menu);
return true;
}
//用于切换 播放/暂停按钮
View.OnClickListener ButtonPlayListener = new OnClickListener() {
public void onClick(View v) {
if (PFlag == true) {
PlayPause.setImageResource(R.drawable.pauseselector);
startService(intent);
bindService(intent,conn,Context.BIND_AUTO_CREATE);
PFlag = false;
} else {
PlayPause.setImageResource(R.drawable.playselector);
stopService(intent);
unbindService(conn);
PFlag = true;
}
}
};
final ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
}
};
}
4.play.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@drawable/bgimage"
tools:context=".Player" >
<ImageButton
android:id="@+id/PlayPause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="46dp"
android:background="#00000000"
android:contentDescription="@string/playdesc"
android:src="@drawable/playselector" />
<TextView
android:id="@+id/Author"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="38dp"
android:text="@string/Author"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>
APK文件下载地址
http://download.csdn.net/detail/u011501908/6742355