四大天王之全局服務Service,音樂播放器

大家晚上好,今晚講的還是四大組件之一Service,它有兩種方式實現全局服務與綁定服務,今天就先介紹全局服務,下次再奉上綁定服務。同樣Service也是沒有界面的,它主要運用在生命週期長的運用中,比如說:音樂播放器,下載與上傳......,我這次是以簡單的音樂播放器爲例,爲大家好好的介紹一下Service是一個怎樣的東東。圖如下。


佈局很簡單就不用說了,四個Button和一個TextVew組成,設置監聽方法就行了。

1.BaseActivity.java

簡單介紹一下這個是應用界面,可以這樣理解,這是一個父類,其他子類可以調用其方法,可以省下很多多餘的操作,代碼流通性,可讀性高。

public abstract class BaseActivity extends Activity {
 private String tag = null;

 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_base);
  tag = getClass().getSimpleName();

  initView();// 本類調用InitView方法
  inteData();// 本類調用inteData方法

 }

 // 播放音樂     startPlay
 public void startPlay(View v) {
  Log.v(tag, "startPlay");
  Toast.makeText(BaseActivity.this,"播放音樂", Toast.LENGTH_SHORT).show();

//意圖實現跳轉功能
  Intent intent = new Intent(this, MusicService.class);

//附加附件,參數一:key值,參數二:values值
  intent.putExtra(MusicService.CMD, MusicService.MUSICPLAY);

//開始服務
  startService(intent);

 }

 // 暫停音樂
 public void pausePlay(View v) {
  Log.v(tag, "pausePlay");
  Intent intent = new Intent(this, MusicService.class);
  intent.putExtra(MusicService.CMD, MusicService.MUSICPPAUSE);
  startService(intent);
 }

 // 停止音樂
 public void stopPlay(View v) {
  Log.v(tag, "stopPlay");
  Intent intent = new Intent(this, MusicService.class);
  intent.putExtra(MusicService.CMD, MusicService.MUSICSTOP);
  startService(intent);
 }

 // 關閉服務
 public void closeService(View v) {
  Log.v(tag, "closeService");

//關閉服務stopService
  Intent intent = new Intent(this, MusicService.class);
  stopService(intent);
 }

//定義抽象方法

 public abstract void initView();

 public abstract void inteData();

}

2.GameActivity.java

//繼承父類方法

public class GameActivity extends BaseActivity {

 //初始化組件
 public void initView() {
  //改變TextView文本
    ((TextView)findViewById(R.id.textView1)).setText("遊戲界面");
  
 }
     //初始化數據
 public void inteData() {

 }

 
 //菜單欄
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  menu.add("設置界面");
  return super.onCreateOptionsMenu(menu);
 }
 
//菜單欄實現跳轉
 public boolean onOptionsItemSelected(MenuItem item) {

//跳轉到SetActivity
  Intent intent=new Intent(this,SetActivity.class);
  startActivity(intent);
  return super.onOptionsItemSelected(item);
 }
 
}

3.SetActivity.java

//繼承父類BaseActivity父類方法

public class SetActivity extends BaseActivity {

 @Override
 public void initView() {

//改變TextView文本值
   ((TextView)findViewById(R.id.textView1)).setText("設置界面");
 }

 @Override
 public void inteData() {

 }

}

4.MusicService.java

//新建MusicService繼承Service子類,實現方法

public class MusicService extends Service {

//定義變量

 public static final String TAG = "MusicService";
 public static final String CMD = "cmd";
 public static final int MUSICPLAY = 1;
 public static final int MUSICPPAUSE = 2;
 public static final int MUSICSTOP = 3;

//音頻播放器定義
 private MediaPlayer play;

 public IBinder onBind(Intent intent) {
  return null;
 }

 public void onCreate() {

//加載MP3格式的音頻,放在在res/raw
  play = MediaPlayer.create(this, R.raw.zhizhuo);
  Log.v(TAG, "onCreate");
  super.onCreate();
 }

//開始命令,在這方法進行判斷

 public int onStartCommand(Intent intent, int flags, int startId) {
  Log.v(TAG, "onStartCommand");

//獲取傳過來的key值,intent.getIntentExtra.

  int cmd2 = intent.getIntExtra(CMD, 0);

//switch判斷
  switch (cmd2) {

//播放
  case MUSICPLAY:
   if (!play.isPlaying()) {

    play.start();
   }

   break;

//暫停
  case MUSICPPAUSE:
   if (play.isPlaying()) {
    play.pause();
   }

   break;

//停止
  case MUSICSTOP:
   if (play.isPlaying()) {
    play.stop();
   }

   break;

  default:
   break;
  }

  return super.onStartCommand(intent, flags, startId);
 }

//銷燬

 @Override
 public void onDestroy() {
  Log.v(TAG, "onDestroy");
  super.onDestroy();
 }

}

今晚就到這了,小編這兩天累壞了,需要好好休息,明天好好上課,學到新的知識分享給大家。晚安。





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