Service——音樂播放

一、項目概括

          1、項目概述

                           主要是爲了明白Service服務應用的目的來播放音樂,主要是通過對服務操作來進行的。

          2、項目運行圖

                      

二、項目講解

             1、項目文件

 

      2、修改佈局文件activity_main.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:background="#C7EDCC"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center">

        <Button
            android:id="@+id/btnPlay"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="50dp"
            android:text="@string/btnPlay" />

       <Button
            android:id="@+id/btnStop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/btnStop" />
    </LinearLayout>
</RelativeLayout>


      3、在com.example.service包中創建AudioService.java文件,代碼如下:

         

package com.example.service;

/**
 * 多線程實現後臺播放背景音樂的service
 */
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;

public class AudioService extends Service implements
		MediaPlayer.OnCompletionListener {
	// 實例化MediaPlayer對象
	MediaPlayer player;
	private final IBinder binder = new AudioBinder();

	@Override
	public IBinder onBind(Intent intent) {
		return binder;
	}

	public void onCreate() {
		super.onCreate();
		// 從raw文件夾中獲取一個應用自帶的mp3文件
		player = MediaPlayer.create(this, R.raw.qq);
		player.setOnCompletionListener(this);
		player.setLooping(true);
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		super.onStartCommand(intent, flags, startId);
		if (!player.isPlaying()) {
			new MusicPlayThread().start();
		}
		else player.isPlaying();
		return START_STICKY;
	}

	
	/**
	 * 當Audio播放完的時候觸發該動作
	 */
	public void onCompletion(MediaPlayer mp) {
		stopSelf();// 結束了,則結束Service

	}

	public void onDestroy() {
		super.onDestroy();
		if (player.isPlaying()) {
			player.stop();
		}
		player.release();
	}

	// 爲了和Activity交互,我們需要定義一個Binder對象
	public class AudioBinder extends Binder {
		// 返回Service對象
		public AudioService getService() {
			return AudioService.this;
		}
	}

	private class MusicPlayThread extends Thread {
		public void run() {
			if (!player.isPlaying()) {
				player.start();
			}
		}
	}
   
}


       4、修改MainActivity.xml文件,代碼如下:

               

package com.example.service;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

	//創建Button對象
	private Button btnPlayClick;
	private Button btnStopClick;
	//創建Intent
    Intent intent = new Intent(MainActivity.this,  
            AudioService.class);  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       //獲取Button對象
        btnPlayClick=(Button) findViewById(R.id.btnPlay);
        btnStopClick=(Button) findViewById(R.id.btnStop);
        //播放
        btnPlayClick.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				startService(intent);  
			}
		});
        
        //暫停
        btnStopClick.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				stopService(intent);
			}
		});
    }

    @Override
    protected void onResume() {
    	super.onResume();
    	stopService(new Intent(this,AudioService.class));
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

 


發佈了36 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章