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

作业要求:

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值