[Kotlin]音樂播放器生命週期

一.Kotlin語言普通寫法

package com.ywjh.playmusicdemo

import android.media.MediaPlayer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button

class MainActivity : AppCompatActivity(), View.OnClickListener {


    private var btn_main_play: Button? = null
    private var btn_main_pause: Button? = null
    private var btn_main_stop: Button? = null
    private var btn_main_exit: Button? = null


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btn_main_play = findViewById(R.id.btn_main_play) as Button
        btn_main_pause = findViewById(R.id.btn_main_pause) as Button
        btn_main_stop = findViewById(R.id.btn_main_stop) as Button
        btn_main_exit = findViewById(R.id.btn_main_exit) as Button

        btn_main_play!!.setOnClickListener(this)
        btn_main_pause!!.setOnClickListener(this)
        btn_main_stop!!.setOnClickListener(this)
        btn_main_exit!!.setOnClickListener(this)
    }
    override public  fun onClick(v: View?) {
        if(btn_main_play==v)
            playMusic()
        else if (btn_main_pause==v)
            pauseMusic()
        else if(btn_main_stop==v)
            stopMusic()
        else if(btn_main_exit==v)
            exitMusic()
    }
    private var  player : MediaPlayer?=null
    //退出,停止,,並退出應用
    private fun exitMusic() {
        stopMusic()
        finish()
    }
    //停止音樂,肯定不爲空,可能正在播放,也可能暫停
    private fun stopMusic() {
        if(player!=null)
        {
            player?.stop()//停止
            player?.reset()//重置
            player?.release()//釋放資源(內存空間)
            player=null;
        }
    }

    private fun pauseMusic() {
        if(player!=null && player!!.isPlaying())
        {//若player不爲空,且正在播放,纔會暫停
            player?.pause()
        }
    }

    private fun playMusic() {
        if (player==null)
        {//如果爲空,纔會創建
            player= MediaPlayer.create(this,R.raw.a_bright_future)

        }
        player?.start()
    }


}

二.使用service服務 需在AndroidManifest註冊

<service android:name="com.ywjh.playmusicdemo.MusicService"></service>

 

1.MusicService

package com.ywjh.playmusicdemo

import android.app.Service
import android.content.Intent
import android.media.MediaPlayer
import android.os.IBinder

class MusicService : Service() {
    //這個onBind綁定service事件 用於返回Service實例
    override fun onBind(p0: Intent?): IBinder? {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        return null
    }

    private var  player : MediaPlayer?=null

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
//        var action:String=intent.getStringExtra("action")
        val action = intent?.getStringExtra("action")
        if ("play".equals(action))
        {
            playMusic()
        }else if ("stop".equals(action))
        {
            stopMusic()
        }else if ("pause".equals(action))
        {
            pauseMusic()
        }else if ("exit".equals(action))
        {
            onDestroy()
        }
        return super.onStartCommand(intent, flags, startId)
    }
    //停止音樂,肯定不爲空,可能正在播放,也可能暫停
    private fun stopMusic() {
        if(player!=null)
        {
            player?.stop()//停止
            player?.reset()//重置
            player?.release()//釋放資源(內存空間)
            player=null;
        }
    }

    private fun pauseMusic() {
        if(player!=null && player!!.isPlaying())
        {//若player不爲空,且正在播放,纔會暫停
            player?.pause()
        }
    }

    private fun playMusic() {
        if (player==null)
        {//如果爲空,纔會創建
            player= MediaPlayer.create(this,R.raw.a_bright_future)

        }
        player?.start()
    }

    override fun onDestroy() {
        super.onDestroy()
        //在死亡之前停止音樂
        stopMusic()
    }
}

2.MainActivity

package com.ywjh.playmusicdemo

import android.content.Intent
import android.media.MediaPlayer
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button

class MainActivity : AppCompatActivity(), View.OnClickListener {


    private var btn_main_play: Button? = null
    private var btn_main_pause: Button? = null
    private var btn_main_stop: Button? = null
    private var btn_main_exit: Button? = null


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
//layout findbyid返回的是View對象將其向下轉換成button對象
        btn_main_play = findViewById(R.id.btn_main_play) as Button
        btn_main_pause = findViewById(R.id.btn_main_pause) as Button
        btn_main_stop = findViewById(R.id.btn_main_stop) as Button
        btn_main_exit = findViewById(R.id.btn_main_exit) as Button

        btn_main_play!!.setOnClickListener(this)
        btn_main_pause!!.setOnClickListener(this)
        btn_main_stop!!.setOnClickListener(this)
        btn_main_exit!!.setOnClickListener(this)
    }
    override public  fun onClick(v: View?) {
        //java :Intent intent=new(this,MusicService.class)
        val intent = Intent(this, MusicService::class.java)
        if(btn_main_play==v) {
            intent.putExtra("action","play") //用於識別做的是哪一個操作
            startService(intent)//開啓服務 並加入標識符
        }
        else if (btn_main_pause==v){
            intent.putExtra("action","pause") //用於識別做的是哪一個操作
            startService(intent)
        }
        else if(btn_main_stop==v){
            intent.putExtra("action","stop") //用於識別做的是哪一個操作
            startService(intent)
        }
        else if(btn_main_exit==v){
            //停止服務
            stopService(intent)
            //結束應用
            finish()
        }
    }
}

三.java語言

1.MusicService

package com.example.playmusicdemo;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

public class MusicService extends Service {

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}

	private MediaPlayer player;
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		String action=intent.getStringExtra("action");
		if ("play".equals(action))
		{
			playMusic();
			
		}else if("stop".equals(action))
		{	
			stopMusic();
		}else if("pause".equals(action))
		{	
			pauseMusic();
		}
		return super.onStartCommand(intent, flags, startId);
	}
	
	//停止音樂,肯定不爲空,也可能正在播,也可能暫停
	private void stopMusic() {
		if(player!=null)
		{
			player.stop();
			player.reset();
			player.release();
			player=null;
		}
	}
	//暫停音樂
	private void pauseMusic() {
		if(player!=null && player.isPlaying())
		{//若player不爲空,且正在播放,纔去暫停
			player.pause();
		}
		
	}
	//播放音樂
	private void playMusic() {
		if(player==null)
		{//如果爲空,纔去創造
			player=MediaPlayer.create(this,R.raw.music);
		}
		player.start();
	}
	@Override
	public void onDestroy() {
		super.onDestroy();
		//在死亡之前停止音樂
		stopMusic();
	}
}

2.MainActivity

package com.example.playmusicdemo;

import android.app.Activity;
import android.content.Intent;
import android.drm.DrmStore.Playback;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

	private Button btn_main_play;
	private Button btn_main_pause;
	private Button btn_main_stop;
	private Button btn_main_exit;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		btn_main_play=(Button) findViewById(R.id.btn_main_play);
		btn_main_pause=(Button) findViewById(R.id.btn_main_pause);
		btn_main_stop=(Button) findViewById(R.id.btn_main_stop);
		btn_main_exit=(Button) findViewById(R.id.btn_main_exit);

		btn_main_play.setOnClickListener(this);
		btn_main_pause.setOnClickListener(this);
		btn_main_stop.setOnClickListener(this);
		btn_main_exit.setOnClickListener(this);
	}
	@Override
	public void onClick(View v) {
		Intent intent=new Intent(this,MusicService.class);
		
		if(btn_main_play==v)
		{
			intent.putExtra("action", "play");//用於識別做的是哪一個操作
			startService(intent);
		}else if(btn_main_pause==v){
			intent.putExtra("action", "pause");
			startService(intent);
		}else if(btn_main_stop==v){
			intent.putExtra("action", "stop");
			startService(intent);
		}else if(btn_main_exit==v){
			//停止服務
			stopService(intent);
			//結束應用
			finish();
		}
		
	}
	
	
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章