Android学习笔记:Service的调用与音乐播放

来源:互联网 发布:密码破译软件 编辑:程序博客网 时间:2024/06/05 12:07

作业要求:

编写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;@Overridepublic 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 表示顯示pauseIntent intent;@Overrideprotected 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);}@Overridepublic 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


0 0
原创粉丝点击