亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Android Studio實現簡單音樂播放功能的示例代碼

瀏覽:67日期:2022-09-21 16:42:30

項目要求

基于Broadcast,BroadcastReceiver等與廣播相關的知識實現簡單的音樂播放功能,包括音樂的播放、暫停、切換、進度選擇、音量調整。

設計效果

(進度條時間刷新功能還沒有實現)

Android Studio實現簡單音樂播放功能的示例代碼

實現思路

音樂服務端負責播放音樂和收發廣播的功能。當音樂服務端作為接收器時,只能接收到主頁面廣播的控制消息;作為發送器時,向主頁面發送歌曲信息更新的消息 主頁面負責進度條以及音量按鈕的監聽,同時也有收發廣播的功能。當主頁面作為接收器時,只能接收到音樂服務端廣播的歌曲信息更新的消息;作為發送器時,向音樂服務端發送對歌曲播放的控制消息。

項目結構圖

Android Studio實現簡單音樂播放功能的示例代碼

主要代碼

1 主頁面

package com.example.dell.musicbox3;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.media.AudioManager;import android.os.Bundle;import android.view.View;import android.view.Window;import android.widget.ImageButton;import android.widget.SeekBar;import android.widget.TextView;public class MainActivity extends Activity implements View.OnClickListener{// 獲取界面中顯示歌曲標題、作者文本框TextView title, author;// 播放/暫停、停止按鈕ImageButton play, next, last;// 聲明音量管理器public AudioManager mAudioManager = null;// 定義進度條public static SeekBar audioSeekBar = null;// 定義音量大小public SeekBar audioVolume = null;ActivityReceiver activityReceiver;public static final String CTL_ACTION = 'org.crazyit.action.CTL_ACTION';public static final String UPDATE_ACTION = 'org.crazyit.action.UPDATE_ACTION';// 定義音樂的播放狀態,0x11代表沒有播放;0x12代表正在播放;0x13代表暫停int status = 0x11;String[] titleStrs = new String[] { '龍卷風', '可愛女人', '星晴' };String[] authorStrs = new String[] { 'JayChou', 'JayChou', 'JayChou' };@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.layout);// 獲取程序界面界面中的兩個按鈕play = (ImageButton) this.findViewById(R.id.play);last = (ImageButton) this.findViewById(R.id.last);next = (ImageButton) this.findViewById(R.id.next);audioVolume = (SeekBar) findViewById(R.id.seekBar2);audioSeekBar = (SeekBar) findViewById(R.id.seekBar1);title = (TextView) findViewById(R.id.title);author = (TextView) findViewById(R.id.author);// 為兩個按鈕的單擊事件添加監聽器play.setOnClickListener(this);last.setOnClickListener(this);next.setOnClickListener(this);// 播放進度監聽audioSeekBar.setOnSeekBarChangeListener(new SeekBarChangeEvent());// 退出后再次進去程序時,進度條保持持續更新if (MusicService.mPlayer != null) {// 設置進度條的最大值MainActivity.audioSeekBar.setMax(MusicService.mPlayer.getDuration());audioSeekBar.setProgress(MusicService.mPlayer.getCurrentPosition());}// 得到當前音量對象mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);// 把當前音量值賦給進度條audioVolume.setProgress(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC));// 監聽音量audioVolume.setOnSeekBarChangeListener(new AudioVolumeChangeEvent());activityReceiver = new ActivityReceiver();// 創建IntentFilterIntentFilter filter = new IntentFilter();// 指定BroadcastReceiver監聽的Actionfilter.addAction(UPDATE_ACTION);// 注冊BroadcastReceiverregisterReceiver(activityReceiver, filter);Intent intent = new Intent(this, MusicService.class);// 啟動后臺ServicestartService(intent);}// 音量監聽class AudioVolumeChangeEvent implements SeekBar.OnSeekBarChangeListener {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress,0);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}}// 播放進度監聽,別忘了Service里面還有個進度條刷新class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {// 假設改變源于用戶拖動if (fromUser) {MusicService.mPlayer.seekTo(progress);// 當進度條的值改變時,音樂播放器從新的位置開始播放}}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {MusicService.mPlayer.pause();}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {MusicService.mPlayer.start();}}// 自定義的BroadcastReceiver,負責監聽從Service傳回來的廣播public class ActivityReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){// 獲取Intent中的update消息,update代表播放狀態int update = intent.getIntExtra('update', -1);// 獲取Intent中的current消息,current代表當前正在播放的歌曲int current = intent.getIntExtra('current', -1);if (current >= 0){title.setText(titleStrs[current]);author.setText(authorStrs[current]);}switch (update){case 0x11:play.setImageResource(R.drawable.play);status = 0x11;break;// 控制系統進入播放狀態case 0x12:// 播放狀態下設置使用暫停圖標play.setImageResource(R.drawable.pause);// 設置當前狀態status = 0x12;break;// 控制系統進入暫停狀態case 0x13:// 暫停狀態下設置使用播放圖標play.setImageResource(R.drawable.play);// 設置當前狀態status = 0x13;break;}}}@Overridepublic void onClick(View source){// 創建IntentIntent intent = new Intent('org.crazyit.action.CTL_ACTION');switch (source.getId()){// 按下播放/暫停按鈕case R.id.play:intent.putExtra('control', 1);break;case R.id.last:intent.putExtra('control', 2);break;//按下上一首按鈕case R.id.next:intent.putExtra('control', 3);break;}// 發送廣播,將被Service組件中的BroadcastReceiver接收到sendBroadcast(intent);}}

2 音樂服務端

package com.example.dell.musicbox3;import java.io.IOException;import android.app.Service;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.content.res.AssetFileDescriptor;import android.content.res.AssetManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.os.IBinder;public class MusicService extends Service implements Runnable{MyReceiver serviceReceiver;//asset文件管理對象AssetManager am;String[] musics = new String[] { '周杰?? - 龍卷風.mp3', '周杰?? - 星晴.mp3', '周杰?? - 可愛女人.mp3' };public static MediaPlayer mPlayer;// 當前的狀態,0x11代表沒有播放;0x12代表正在播放;0x13代表暫停int status = 0x11;// 記錄當前正在播放的音樂int current = 0;@Override//非綁定式服務public IBinder onBind(Intent intent){return null;}@Override//定義初始化函數public void onCreate(){super.onCreate();//獲取asset文件夾里的所有歌曲am = getAssets();// 創建具有篩選功能的服務端接收器serviceReceiver = new MyReceiver();// 創建IntentFilter過濾器IntentFilter filter = new IntentFilter();//使音樂服務端的接收器只能接收客戶端發來的CTL_ACTION消息filter.addAction(MainActivity.CTL_ACTION);//注冊帶有此篩選器且名字叫做serviceReceiver的接收器registerReceiver(serviceReceiver, filter);// 創建MediaPlayermPlayer = new MediaPlayer();// 為MediaPlayer播放完成事件綁定監聽器mPlayer.setOnCompletionListener(new OnCompletionListener() // ①{@Overridepublic void onCompletion(MediaPlayer mp){current++;if (current >= 3){current = 0;}//發送廣播通知Activity更改文本框Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION);sendIntent.putExtra('current', current);// 發送廣播,將被Activity組件中的BroadcastReceiver接收到sendBroadcast(sendIntent);// 準備并播放音樂prepareAndPlay(musics[current]);}});}public class MyReceiver extends BroadcastReceiver{@Overridepublic void onReceive(final Context context, Intent intent){int control = intent.getIntExtra('control', -1);switch (control){// 播放或暫停case 1:// 原來處于沒有播放狀態if (status == 0x11){// 準備并播放音樂prepareAndPlay(musics[current]);status = 0x12;}// 原來處于播放狀態else if (status == 0x12){// 暫停mPlayer.pause();// 改變為暫停狀態status = 0x13;}// 原來處于暫停狀態else if (status == 0x13){// 播放mPlayer.start();// 改變狀態status = 0x12;}break;// 停止聲音case 2://上一首切換if (current <= 0) {//停止播放mPlayer.stop();//修改currentcurrent = musics.length-1;//播放prepareAndPlay(musics[current]);status = 0x12;}else{mPlayer.stop();current--;prepareAndPlay(musics[current]);status = 0x12;}break;//下一首切換case 3:if (current >= 2) {mPlayer.stop();current = 0;prepareAndPlay(musics[current]);status = 0x12;}else{mPlayer.stop();current++;prepareAndPlay(musics[current]);status = 0x12;}break;}// 廣播通知Activity更改圖標、文本框Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION);sendIntent.putExtra('update', status);sendIntent.putExtra('current', current);// 發送廣播,將被Activity組件中的BroadcastReceiver接收到sendBroadcast(sendIntent);}}private void prepareAndPlay(String music) {try {// 打開指定音樂文件AssetFileDescriptor afd = am.openFd(music);mPlayer.reset();// 使用MediaPlayer加載指定的聲音文件。mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());// 準備聲音mPlayer.prepare();// 播放mPlayer.start();// 設置進度條最大值MainActivity.audioSeekBar.setMax(MusicService.mPlayer.getDuration());new Thread(this).start();} catch (IOException e) {e.printStackTrace();}}// 刷新進度條public void run() {int CurrentPosition = 0;int total = mPlayer.getDuration();while (mPlayer != null && CurrentPosition < total) {try {Thread.sleep(1000);if (mPlayer != null) {CurrentPosition = mPlayer.getCurrentPosition();}} catch (InterruptedException e) {e.printStackTrace();}MainActivity.audioSeekBar.setProgress(CurrentPosition);}}}

倉庫鏈接

MusicBox

到此這篇關于Android Studio實現簡單音樂播放功能的示例代碼的文章就介紹到這了,更多相關Android Studio 音樂播放內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
主站蜘蛛池模板: 19国产精品麻豆免费观看 | 热99re国产久热在线 | 欧美精品国产一区二区 | 伊人影院在线观看 | 国产精品麻豆99久久 | 欧美日韩在线观看区一二 | 国产精品久久久天天影视香蕉 | 在线观看亚洲一区 | 成人性生交大片免费看午夜a | 成年片人免费www | 91精品手机国产免费 | 欧美一级片黄色片 | 欧洲成人爽视频在线观看 | jizz中国zz女人18 | 成人午夜久久 | 91网址在线播放 | 狼人久草 | 黄色短视频免费 | 美国免费毛片性视频 | 日本特黄特色大片免费视频 | 色婷婷影院在线视频免费播放 | 五月快播 | 亚洲国产成人va在线观看网址 | 婷婷色网站| 大陆1区二区三区 | 国产精品久久久久影院免费 | 亚洲高清不卡视频 | 欧美成人免费在线观看 | 亚欧在线精品免费观看一区 | 色天天天天综合男人的天堂 | 韩国日本一级毛片免费视频 | 一级爱做片免费观看久久 | 97福利在线| 国产在线一区精品对白麻豆 | 国产成人91精品 | 高清亚洲精品酒店一区 | 在线观看免费国产视频 | 日批网站在线观看 | 亚洲欧美在线观看首页 | 国产污污视频 | 欧美999|