Android Broadcast编写的音乐播放器
生活随笔
收集整理的這篇文章主要介紹了
Android Broadcast编写的音乐播放器
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
此播放器的播放操作交給后臺(tái)執(zhí)行,二者通過廣播進(jìn)行進(jìn)行通信(雙向通信),前臺(tái)點(diǎn)擊播放暫停停止按鈕通過廣播發(fā)送給后臺(tái),后臺(tái)播放變換通過廣播通知前臺(tái)。 前臺(tái)代碼package org.crazyit.broadcast;import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import an id="cproIframe_935282_2" width="300" height="250" src="http://cb.baidu.com/ecom?adn=3&at=231&aurl=&cad=1&ccd=24&cec=UTF-8&cfv=17&ch=0&col=zh-CN&conOP=0&cpa=1&dai=2&dis=0<r=http%3A%2F%2Fwww.gfsoso.net%2F%3Fq%3Dandroid%25E9%259F%25B3%25E4%25B9%2590%25E6%2592%25AD%25E6%2594%25BE%25E5%2599%25A8%2520service%2520broadcast%26pn%3D10<u=http%3A%2F%2Fwww.bingfengsa.com%2Fa%2F20141204%2F40522.html&lunum=6&n=55025008_cpr&pcs=1244x557&pis=10000x10000&ps=562x788&psr=1366x768&pss=1244x598&qn=d0b97bf8624b7ee1&rad=&rs=300&rsi0=300&rsi1=250&rsi5=4&rss0=%23FFFFFF&rss1=%23FFFFFF&rss2=%230000ff&rss3=%23444444&rss4=%23008000&rss5=&rss6=%23e10900&rss7=&scale=&skin=&td_id=9223372032564518175&tn=text_default_300_250&tpr=1433074571286&ts=1&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=935282&ti=cnblogs%3A%20Android%20Broadcast%E7%BC%96%E5%86%99%E7%9A%84%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE%E5%99%A8%20-%20%E5%BC%97%E4%B8%8D%E6%98%AF%E4%BD%9B%20-%20Android%20-%20%E5%B0%8F%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6&tt=1433074571187.1080.1614.1615" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="margin: 0px; padding: 0px;">
此播放器的播放操作交給后臺(tái)執(zhí)行,二者通過廣播進(jìn)行進(jìn)行通信(雙向通信),前臺(tái)點(diǎn)擊播放暫停停止按鈕通過廣播發(fā)送給后臺(tái),后臺(tái)播放變換通過廣播通知前臺(tái)。
前臺(tái)代碼
package org.crazyit.broadcast;import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; import android.widget.TextView;/*** Description:* <br/>site: <a href="http://www.crazyit.org">crazyit.org</a>* <br/>Copyright (C), 2001-2014, Yeeku.H.Lee* <br/>This program is protected by copyright laws.* <br/>Program Name:* <br/>Date:* @author Yeeku.H.Lee kongyeeku@163.com* @version 1.0*/ public class MusicBox extends Activity implements OnClickListener {// 獲取界面中顯示歌曲標(biāo)題、作者文本框 TextView title, author;// 播放/暫停、停止按鈕 ImageButton play, stop;ActivityReceiver activityReceiver;public static final String CTL_ACTION = "org.crazyit.action.CTL_ACTION";public static final String UPDATE_ACTION ="org.crazyit.action.UPDATE_ACTION";// 定義音樂的播放狀態(tài),0x11代表沒有播放;0x12代表正在播放;0x13代表暫停int status = 0x11;String[] titleStrs = new String[] { "心愿", "約定", "美麗新世界" };String[] authorStrs = new String[] { "未知藝術(shù)家", "周蕙", "伍佰" };@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);// 獲取程序界面界面中的兩個(gè)按鈕play = (ImageButton) this.findViewById(R.id.play);stop = (ImageButton) this.findViewById(R.id.stop);title = (TextView) findViewById(R.id.title);author = (TextView) findViewById(R.id.author);// 為兩個(gè)按鈕的單擊事件添加監(jiān)聽器play.setOnClickListener(this);stop.setOnClickListener(this); activityReceiver = new ActivityReceiver();// 創(chuàng)建IntentFilterIntentFilter filter = new IntentFilter();// 指定BroadcastReceiver監(jiān)聽的Actionfilter.addAction(UPDATE_ACTION);// 注冊(cè)BroadcastReceiver registerReceiver(activityReceiver, filter);Intent intent = new Intent(this, MusicService.class);// 啟動(dòng)后臺(tái)Service startService(intent);}// 自定義的BroadcastReceiver,負(fù)責(zé)監(jiān)聽從Service傳回來的廣播public class ActivityReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){// 獲取Intent中的update消息,update代表播放狀態(tài)int update = intent.getIntExtra("update", -1);// 獲取Intent中的current消息,current代表當(dāng)前正在播放的歌曲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;// 控制系統(tǒng)進(jìn)入播放狀態(tài)case 0x12:// 播放狀態(tài)下設(shè)置使用暫停圖標(biāo) play.setImageResource(R.drawable.pause);// 設(shè)置當(dāng)前狀態(tài)status = 0x12;break;// 控制系統(tǒng)進(jìn)入暫停狀態(tài)case 0x13:// 暫停狀態(tài)下設(shè)置使用播放圖標(biāo) play.setImageResource(R.drawable.play);// 設(shè)置當(dāng)前狀態(tài)status = 0x13;break;}}}@Overridepublic void onClick(View source){// 創(chuàng)建IntentIntent intent = new Intent("org.crazyit.action.CTL_ACTION");switch (source.getId()){// 按下播放/暫停按鈕case R.id.play:intent.putExtra("control", 1);break;// 按下停止按鈕case R.id.stop:intent.putExtra("control", 2);break;}// 發(fā)送廣播,將被Service組件中的BroadcastReceiver接收到 sendBroadcast(intent);} }后臺(tái)服務(wù)
/****/ package org.crazyit.broadcast;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;/*** Description:* <br/>網(wǎng)站: <a href="http://www.crazyit.org">瘋狂Java聯(lián)盟</a>* <br/>Copyright (C), 2001-2014, Yeeku.H.Lee* <br/>This program is protected by copyright laws.* <br/>Program Name:* <br/>Date:* @author Yeeku.H.Lee kongyeeku@163.com* @version 1.0*/ public class MusicService extends Service {MyReceiver serviceReceiver;AssetManager am;String[] musics = new String[] { "wish.mp3", "promise.mp3","beautiful.mp3" };MediaPlayer mPlayer;// 當(dāng)前的狀態(tài),0x11 代表沒有播放 ;0x12代表 正在播放;0x13代表暫停int status = 0x11;// 記錄當(dāng)前正在播放的音樂int current = 0;@Overridepublic IBinder onBind(Intent intent){return null;}@Overridepublic void onCreate(){am = getAssets();// 創(chuàng)建BroadcastReceiverserviceReceiver = new MyReceiver();// 創(chuàng)建IntentFilterIntentFilter filter = new IntentFilter();filter.addAction(MusicBox.CTL_ACTION);registerReceiver(serviceReceiver, filter);// 創(chuàng)建MediaPlayermPlayer = new MediaPlayer();// 為MediaPlayer播放完成事件綁定監(jiān)聽器mPlayer.setOnCompletionListener(new OnCompletionListener() //① {@Overridepublic void onCompletion(MediaPlayer mp){current++;if (current >= 3){current = 0;}// 發(fā)送廣播通知Activity更改文本框Intent sendIntent = new Intent(MusicBox.UPDATE_ACTION);sendIntent.putExtra("current", current);// 發(fā)送廣播 ,將被Activity組件中的BroadcastReceiver接收到 sendBroadcast(sendIntent);// 準(zhǔn)備、并播放音樂 prepareAndPlay(musics[current]);}});super.onCreate();}public class MyReceiver extends BroadcastReceiver{@Overridepublic void onReceive(final Context context, Intent intent){int control = intent.getIntExtra("control", -1);switch (control){// 播放或暫停case 1:// 原來處于沒有播放狀態(tài)if (status == 0x11){// 準(zhǔn)備、并播放音樂 prepareAndPlay(musics[current]);status = 0x12;}// 原來處于播放狀態(tài)else if (status == 0x12){// 暫停 mPlayer.pause();// 改變?yōu)闀和顟B(tài)status = 0x13;}// 原來處于暫停狀態(tài)else if (status == 0x13){// 播放 mPlayer.start();// 改變狀態(tài)status = 0x12;}break;// 停止聲音case 2:// 如果原來正在播放或暫停if (status == 0x12 || status == 0x13){// 停止播放 mPlayer.stop();status = 0x11;}}// 發(fā)送廣播通知Activity更改圖標(biāo)、文本框Intent sendIntent = new Intent(MusicBox.UPDATE_ACTION);sendIntent.putExtra("update", status);sendIntent.putExtra("current", current);// 發(fā)送廣播 ,將被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());// 準(zhǔn)備聲音 mPlayer.prepare();// 播放 mPlayer.start();}catch (IOException e){e.printStackTrace();}} }布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"> <ImageButtonandroid:id="@+id/play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/play"/> <ImageButton android:id="@+id/stop" android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/stop"/> <LinearLayoutandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"> <TextViewandroid:id="@+id/title"android:layout_width="wrap_content" android:layout_height="wrap_content"android:textSize="25px"android:textColor="#ffffff"android:ellipsize="marquee"android:layout_weight="1"android:marqueeRepeatLimit="marquee_forever"/> <TextViewandroid:id="@+id/author"android:textSize="15px"android:gravity="center_vertical"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content"/> </LinearLayout> </LinearLayout>?
配置文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="org.crazyit.broadcast"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="10"android:targetSdkVersion="17" /><application android:icon="@drawable/ic_launcher" android:label="@string/app_name"><activity android:name=".MusicBox"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><service android:name=".MusicService"></service></application> </manifest>?
總結(jié)
以上是生活随笔為你收集整理的Android Broadcast编写的音乐播放器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android初步学习BroadCast
- 下一篇: WPF-常用布局容器