一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Android - Android通過Service實(shí)現(xiàn)簡單的音樂播放

Android通過Service實(shí)現(xiàn)簡單的音樂播放

2022-02-15 17:41Json_Jerry Android

這篇文章主要介紹了Android通過Service實(shí)現(xiàn)簡單的音樂播放,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

android音樂播放效果,簡單的服務(wù)開啟。

這里將用到android的四大組件之一:Service

注意:Service是自大組件之一,需要注冊。

什么是服務(wù)?

1:“Service” 意思即“服務(wù)”的意思, 像 Windows 上面的服務(wù)一樣,服務(wù)是在后臺上運(yùn)行,承擔(dān)著靜悄悄的不為人所注意的工作。

2:Service運(yùn)行在后臺,它是不可見的、無界面的程序。

3:Service可以在很多場合的應(yīng)用中使用,比如播放多媒體的時候用戶啟動了其他Activity,這個時候程序要在后臺繼續(xù)播放;比如檢測SD卡上文件的變化;再或者在后臺記錄用戶的地理信息位置的改變;或者啟動一個服務(wù)來運(yùn)行并一直監(jiān)聽某種動作等等。

下面是源碼:

MainActivity

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
 * 這是一個Service生命周期及開啟服務(wù)的小例子
 * 實(shí)現(xiàn)播放音樂功能
 */
public class MainActivity extends AppCompatActivity {
 /**
  * 規(guī)定開始音樂、暫停音樂、結(jié)束音樂的標(biāo)志
  */
 public static final int PLAT_MUSIC=1;
 public static final int PAUSE_MUSIC=2;
 public static final int STOP_MUSIC=3;
 private MyBroadCastReceiver receiver;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  receiver=new MyBroadCastReceiver();
  IntentFilter filter=new IntentFilter();
  filter.addAction("com.complete");
  registerReceiver(receiver,filter);
 }
 public void onClick(View view){
  switch (view.getId()){
   //開始音樂
   case R.id.btn_startmusic:
    playingmusic(PLAT_MUSIC);
    break;
   //暫停
   case R.id.btn_pausemusic:
    playingmusic(PAUSE_MUSIC);
    break;
   //停止
   case R.id.btn_stopmusic:
    playingmusic(STOP_MUSIC);
    break;
  }
 }
 private void playingmusic(int type) {
  //啟動服務(wù),播放音樂
  Intent intent=new Intent(this,PlayingMusicServices.class);
  intent.putExtra("type",type);
  startService(intent);
 }
 @Override
 protected void onDestroy() {
  super.onDestroy();
  unregisterReceiver(receiver);
 }
}

MyBroadCastReceiver類(廣播接收者):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
 * 這是一個Service生命周期及開啟服務(wù)的小例子
 * 實(shí)現(xiàn)播放音樂功能
 */
public class MainActivity extends AppCompatActivity {
 /**
  * 規(guī)定開始音樂、暫停音樂、結(jié)束音樂的標(biāo)志
  */
 public static final int PLAT_MUSIC=1;
 public static final int PAUSE_MUSIC=2;
 public static final int STOP_MUSIC=3;
 private MyBroadCastReceiver receiver;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 
  receiver=new MyBroadCastReceiver();
  IntentFilter filter=new IntentFilter();
  filter.addAction("com.complete");
  registerReceiver(receiver,filter);
 }
 public void onClick(View view){
  switch (view.getId()){
   //開始音樂
   case R.id.btn_startmusic:
    playingmusic(PLAT_MUSIC);
    break;
   //暫停
   case R.id.btn_pausemusic:
    playingmusic(PAUSE_MUSIC);
    break;
   //停止
   case R.id.btn_stopmusic:
    playingmusic(STOP_MUSIC);
    break;
  }
 }
 private void playingmusic(int type) {
  //啟動服務(wù),播放音樂
  Intent intent=new Intent(this,PlayingMusicServices.class);
  intent.putExtra("type",type);
  startService(intent);
 }
 @Override
 protected void onDestroy() {
  super.onDestroy();
  unregisterReceiver(receiver);
 }
}

PlayingMusicServices類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/**
 * 這是一個Start Service
 */
public class PlayingMusicServices extends Service {
 //用于播放音樂等媒體資源
 private MediaPlayer mediaPlayer;
 //標(biāo)志判斷播放歌曲是否是停止之后重新播放,還是繼續(xù)播放
 private boolean isStop=true;
 /**
  * onBind,返回一個IBinder,可以與Activity交互
  * 這是Bind Service的生命周期方法
  * @param intent
  * @return
  */
 @Nullable
 @Override
 public IBinder onBind(Intent intent) {
  return null;
 }
 //在此方法中服務(wù)被創(chuàng)建
 @Override
 public void onCreate() {
  super.onCreate();
  if (mediaPlayer==null){
   mediaPlayer=new MediaPlayer();
 
   //為播放器添加播放完成時的監(jiān)聽器
   mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
     //發(fā)送廣播到MainActivity
     Intent intent=new Intent();
     intent.setAction("com.complete");
     sendBroadcast(intent);
    }
   });
  }
 }
 
/**
  * 在此方法中,可以執(zhí)行相關(guān)邏輯,如耗時操作
  * @param intent :由Activity傳遞給service的信息,存在intent中
  * @param flags :規(guī)定的額外信息
  * @param startId :開啟服務(wù)時,如果有規(guī)定id,則傳入startid
  * @return 返回值規(guī)定此startservice是哪種類型,粘性的還是非粘性的
  *   START_STICKY:粘性的,遇到異常停止后重新啟動,并且intent=null
  *   START_NOT_STICKY:非粘性,遇到異常停止不會重啟
  *   START_REDELIVER_INTENT:粘性的,重新啟動,并且將Context傳遞的信息intent傳遞
  * 此方法是唯一的可以執(zhí)行很多次的方法
  */
 @Override
 public int onStartCommand(Intent intent, int flags, int startId) {
  switch (intent.getIntExtra("type",-1)){
   case MainActivity.PLAT_MUSIC:
    if (isStop){
     //重置mediaplayer
     mediaPlayer.reset();
     //將需要播放的資源與之綁定
     mediaPlayer=MediaPlayer.create(this,R.raw.birds);
     //開始播放
     mediaPlayer.start();
     //是否循環(huán)播放
     mediaPlayer.setLooping(false);
     isStop=false;
    }else if (!isStop&&mediaPlayer.isPlaying()&&mediaPlayer!=null){
     mediaPlayer.start();
    }
    break;
   case MainActivity.PAUSE_MUSIC:
    //播放器不為空,并且正在播放
    if (mediaPlayer!=null&&mediaPlayer.isPlaying()){
     mediaPlayer.pause();
    }
    break;
   case MainActivity.STOP_MUSIC:
    if (mediaPlayer!=null){
     //停止之后要開始播放音樂
     mediaPlayer.stop();
     isStop=true;
    }
    break;
  }
  return START_NOT_STICKY;
 }
 
 @Override
 public void onDestroy() {
  super.onDestroy();
 }
}

最后不要忘記在清單配置文件中注冊服務(wù):

?
1
2
3
<service android:name=".PlayingMusicServices"
  android:exported="true"
  android:enabled="true"/>123

在res下新建一個raw的文件夾,將事先下載好的MP3文件放入中,這里的歌曲是我自己下載的是birds.mp3 。

Android通過Service實(shí)現(xiàn)簡單的音樂播放

Android Studio下運(yùn)行無錯。

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。

原文鏈接:https://blog.csdn.net/Json_Jerry/article/details/52626624

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费成年网站 | 久久久久久久99精品免费观看 | 欧美乱理伦另类视频 | 国产三区二区 | 91精品国产免费久久 | a男人的天堂久久a毛片 | 被夫上司强迫中文 | 国产永久一区二区三区 | 被教官揉了一晚上的奶小说 | 国内精品99 | 91在线精品国产丝袜超清 | 国产a毛片在线 | 日韩免费在线看 | 国产日韩精品欧美一区 | 美女机机对机机的视频(免费) | 非洲黑女人性xxxx | 久久久免费观成人影院 | 四虎国产欧美成人影院 | 外女思春台湾三级 | 国产在线播放一区 | 成人小视频在线观看免费 | 欧美日韩在线一区二区三区 | 午夜视频一区 | 久久久久久久尹人综合网亚洲 | 国产色在线观看 | 国产欧美一区二区三区免费看 | 美女一级ba大片免色 | 青柠影院在线观看免费完整版1 | 日韩欧美国产一区 | 日韩影院在线观看 | www毛片| 果冻传媒在线视频观看免费 | 欧美日韩中文字幕一区二区高清 | 好涨好大我快受不了了视频网 | 国产精品自在欧美一区 | 日本卡1卡2卡4卡免费 | 美女口述又粗又大感觉 | 美女奶口隐私免费视频网站 | 不良网站在线观看 | se在线播放 | 日本捏胸吃奶视频免费 |