在Service中播放音樂
阿新 • • 發佈:2019-02-13
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" 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="com.lwking.musicservice.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="播放" android:id="@+id/btn_music_play" android:layout_gravity="center_horizontal" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="暫停" android:id="@+id/btn_music_pause" android:layout_gravity="center_horizontal" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="停止" android:id="@+id/btn_music_stop" android:layout_gravity="center_horizontal" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="退出" android:id="@+id/btn_music_exit" android:layout_gravity="center_horizontal" /> </LinearLayout>
介面效果
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_music_play; //播放 private Button btn_music_pause; //暫停 private Button btn_music_stop; //停止 private Button btn_music_exit; //退出 private MediaPlayer mediaPlayer; //音樂播放物件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //繫結按鈕 btn_music_play = (Button) findViewById(R.id.btn_music_play); btn_music_pause = (Button) findViewById(R.id.btn_music_pause); btn_music_stop = (Button) findViewById(R.id.btn_music_stop); btn_music_exit = (Button) findViewById(R.id.btn_music_exit); //設定點選監聽 btn_music_play.setOnClickListener(this); btn_music_pause.setOnClickListener(this); btn_music_stop.setOnClickListener(this); btn_music_exit.setOnClickListener(this); } @Override public void onClick(View v) { Intent intent = new Intent(this, MusicService.class); switch (v.getId()) { case R.id.btn_music_play: //播放 intent.putExtra("action", "play");//設定標識 startService(intent);//開啟Service break; case R.id.btn_music_pause: //暫停 intent.putExtra("action", "pause"); startService(intent); break; case R.id.btn_music_stop: //停止 intent.putExtra("action", "stop"); startService(intent); break; case R.id.btn_music_exit: //退出 stopService(intent); //停止Service finish(); //關掉頁面 break; } } }
MusicService.java
/** * 播放音樂的service */ public class MusicService extends Service { private MediaPlayer mediaPlayer; public MusicService() { } @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { String action = intent.getStringExtra("action"); //獲取標識 if ("play".equals(action)) { playMusic(); } else if ("pause".equals(action)) { pauseMusic(); } else if ("stop".equals(action)) { stopMusic(); } return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); //在退出前停止音樂 stopMusic(); } /** * 播放音樂 */ private void playMusic() { if (mediaPlayer == null) { mediaPlayer = MediaPlayer.create(this, R.raw.closer); } mediaPlayer.start(); } /** * 暫停音樂 */ private void pauseMusic() { if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.pause(); } } /** * 停止音樂 */ private void stopMusic() { if (mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.stop(); mediaPlayer.reset(); mediaPlayer.release(); mediaPlayer = null; } } }
注意點
1.要在目錄中res下建立一個資料夾raw用了存放音訊檔案
2.音訊檔名要小寫,不能帶字尾。不然會報錯