我的Android案例—MusicBox
来源:互联网 发布:默读知乎 编辑:程序博客网 时间:2024/05/29 06:55
2015年的Android案例之旅
案例五:MusicBox
涉及文件:
res->layout->activity_music_box.xml 布局文件
res->values->strings 资源文件之字符串资源
res->AndroidManifest.xml 系统清单文件
src->com.activity.musicbox.MusicBox.java java文件
src->com.service.musicbox.MusicService.java java文件
activity_music_box.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 文本控件 --> <TextView android:id="@+id/show" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/hello_world"/> <!-- 按钮控件 点击播放或暂停音乐 --> <Button android:id="@+id/play" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/play"/> <!-- 按钮控件 点击停止播放 --> <Button android:id="@+id/stop" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/stop"/> </LinearLayout>
strings
<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">MusicBox</string> <string name="hello_world">音乐盒</string> <string name="action_settings">Settings</string> <string name="play">播放</string> <string name="stop">停止</string></resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><!-- 申明包名以及版本号 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.activity.musicbox" android:versionCode="1" android:versionName="1.0" ><!-- 申明程序兼容的最低版本 --> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /><!-- 包含那些组件 --> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.activity.musicbox.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组件 --> <service android:name="com.service.musicbox.MusicService"> <intent-filter> <action android:name="com.service.musicbox"></action> </intent-filter> </service> </application><!-- 添加对SD卡读写的权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/></manifest>
MusicBox.java
/** * @param 实现OnClickListener接口 * 统一管理OnClick事件 * @author Administrator * */public class MusicBox extends Activity implements OnClickListener {// 定义Log标签private static final String TAG = "MUSICBOX";// 声明控件对象private Button play, stop;private TextView show;private MusicRecevier musicRecevier;//当前的状态 0x11:没有播放0x12:正在播放0x13:暂停int state = 0x11;//声明其它组件的Action//Service的Actionpublic static final String SERVICE_ACTION = "com.service.musicbox";//发送给Service的广播public static final String MYRECEIVER_ACTION = "com.broadcast.musibox.myreceiver";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_music_box);Log.i(TAG, "MUSICBOX is onCreate");//获取布局控件init();musicRecevier = new MusicRecevier();//创建IntentFilterIntentFilter filter = new IntentFilter();//指定BroadCastRecevier监听的Actionfilter.addAction(MYRECEIVER_ACTION);//注册BroadCastRecevierregisterReceiver(musicRecevier, filter);//启动ServiceIntent intent = new Intent(SERVICE_ACTION);startService(intent);}@Overridepublic void onClick(View source) {//创建Intent对象,用于发送广播Intent intent = new Intent(MusicService.MUSICRECEIVER);switch(source.getId()){case R.id.play:intent.putExtra("control", 1);break;case R.id.stop:intent.putExtra("control", 2);break;default:break;}Log.i(TAG, "MUSICBOX is sendBroadcast");sendBroadcast(intent);}/** * @param接收MusicBox的广播 * @author Administrator * */public class MusicRecevier extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// 获取Intent中的update信息,updte代表播放状态int update = intent.getIntExtra("update", -1);//获取Intent中的current信息,current代表歌曲信息int current = intent.getIntExtra("current", -1);if(current >= 0){show.setText("new Music");}switch(update){case 0x11:show.setText("暂时没有歌曲播放");break;case 0x12:show.setText("歌曲正在播放");break;case 0x13:show.setText("歌曲播放暂停");break;default:break;}Log.i(TAG, "MUSICBOX is onReceive");}}/** * @param获取布局文件中的控件 */public void init(){play = (Button)this.findViewById(R.id.play);stop = (Button)this.findViewById(R.id.stop);play.setOnClickListener(this);stop.setOnClickListener(this);show = (TextView)this.findViewById(R.id.show);}}
MusicService.java
public class MusicService extends Service{//定义Log标签private static final String TAG="MusicService";//定义音乐播放器private MediaPlayer mMediaPlayer ;//当前的状态 0x11:没有播放0x12:正在播放0x13:暂停int state = 0x11;MyReceiver serviceReceiver;//定义MusicReceiver的Actionpublic static final String MUSICRECEIVER = "com.action.musicbox.musicreceiver";@Overridepublic IBinder onBind(Intent intent) {return null;}//Service创建时启动广播@Overridepublic void onCreate() {//创建BroadcastReceiverserviceReceiver = new MyReceiver();//创建IntentFilter注册该ReceiverIntentFilter filter = new IntentFilter();filter.addAction(MUSICRECEIVER);registerReceiver(serviceReceiver, filter);//创建MediaPlayermMediaPlayer = new MediaPlayer();//为mMediaPlayer播放完成事件绑定监听器mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {//发送广播通知MusicBox更改文本内容Intent intent = new Intent(MusicBox.MYRECEIVER_ACTION);intent.putExtra("current", "1");sendBroadcast(intent);}});super.onCreate();Log.i(TAG, "MusicService is oncreate");}/** * @param接收Service中的广播 * @author Administrator * */public class MyReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {int control = intent.getIntExtra("control", -1);switch(control){//播放或暂停case 1://播放状态if(state == 0x11){//歌曲暂时先写死prepareAndPlay(null);//修改状态state = 0x12;}//原来处于播放状态则暂停else if(state == 0x12){//暂停mMediaPlayer.pause();//修改状态state = 0x13;}//原来处于暂停状态的else if(state == 0x13){//播放mMediaPlayer.start();//修改状态state = 0x12;}break;//停止case 2:if(state == 0x12 || state == 0x13){//停止播放mMediaPlayer.stop();//修改状态state = 0x11;}break;default:break;}//创建一个Intent对象Intent sendIntent = new Intent(MusicBox.MYRECEIVER_ACTION);sendIntent.putExtra("update", state);Log.i(TAG, "MusicService is sendBroadcast");//发送广播,将被MusicBox中的BroadCastRecevier接收到sendBroadcast(sendIntent);}}/** * @param播放指定的音乐 * @param music */private void prepareAndPlay(String music){try {mMediaPlayer.reset();//装载音乐暂时写死!!mMediaPlayer.setDataSource("/mnt/sdcard/001.mp3");mMediaPlayer.prepare();//开始播放音乐mMediaPlayer.start();} catch (Exception e) {// TODO: handle exception}Log.i(TAG, "MusicService is prepareAndPlay");}}
总结
一个简单的音乐播放器,把Activity,Service,BroadCastRecevier结合使用了一下,感觉到了一点点的压力,不论是代码量还是业务逻辑。发现在敲代码前一定要想好写什么,为什么这么写,怎么写会更好。。。加油吧~~PS:原本下午就应该敲完,测试完并上传到博客中。。。可是今天是周末~适当的放松有益身心健康。
<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">MusicBox</string> <string name="hello_world">音乐盒</string> <string name="action_settings">Settings</string> <string name="play">播放</string> <string name="stop">停止</string></resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><!-- 申明包名以及版本号 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.activity.musicbox" android:versionCode="1" android:versionName="1.0" ><!-- 申明程序兼容的最低版本 --> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /><!-- 包含那些组件 --> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.activity.musicbox.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组件 --> <service android:name="com.service.musicbox.MusicService"> <intent-filter> <action android:name="com.service.musicbox"></action> </intent-filter> </service> </application><!-- 添加对SD卡读写的权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/></manifest>
MusicBox.java
/** * @param 实现OnClickListener接口 * 统一管理OnClick事件 * @author Administrator * */public class MusicBox extends Activity implements OnClickListener {// 定义Log标签private static final String TAG = "MUSICBOX";// 声明控件对象private Button play, stop;private TextView show;private MusicRecevier musicRecevier;//当前的状态 0x11:没有播放0x12:正在播放0x13:暂停int state = 0x11;//声明其它组件的Action//Service的Actionpublic static final String SERVICE_ACTION = "com.service.musicbox";//发送给Service的广播public static final String MYRECEIVER_ACTION = "com.broadcast.musibox.myreceiver";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_music_box);Log.i(TAG, "MUSICBOX is onCreate");//获取布局控件init();musicRecevier = new MusicRecevier();//创建IntentFilterIntentFilter filter = new IntentFilter();//指定BroadCastRecevier监听的Actionfilter.addAction(MYRECEIVER_ACTION);//注册BroadCastRecevierregisterReceiver(musicRecevier, filter);//启动ServiceIntent intent = new Intent(SERVICE_ACTION);startService(intent);}@Overridepublic void onClick(View source) {//创建Intent对象,用于发送广播Intent intent = new Intent(MusicService.MUSICRECEIVER);switch(source.getId()){case R.id.play:intent.putExtra("control", 1);break;case R.id.stop:intent.putExtra("control", 2);break;default:break;}Log.i(TAG, "MUSICBOX is sendBroadcast");sendBroadcast(intent);}/** * @param接收MusicBox的广播 * @author Administrator * */public class MusicRecevier extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// 获取Intent中的update信息,updte代表播放状态int update = intent.getIntExtra("update", -1);//获取Intent中的current信息,current代表歌曲信息int current = intent.getIntExtra("current", -1);if(current >= 0){show.setText("new Music");}switch(update){case 0x11:show.setText("暂时没有歌曲播放");break;case 0x12:show.setText("歌曲正在播放");break;case 0x13:show.setText("歌曲播放暂停");break;default:break;}Log.i(TAG, "MUSICBOX is onReceive");}}/** * @param获取布局文件中的控件 */public void init(){play = (Button)this.findViewById(R.id.play);stop = (Button)this.findViewById(R.id.stop);play.setOnClickListener(this);stop.setOnClickListener(this);show = (TextView)this.findViewById(R.id.show);}}
MusicService.java
public class MusicService extends Service{//定义Log标签private static final String TAG="MusicService";//定义音乐播放器private MediaPlayer mMediaPlayer ;//当前的状态 0x11:没有播放0x12:正在播放0x13:暂停int state = 0x11;MyReceiver serviceReceiver;//定义MusicReceiver的Actionpublic static final String MUSICRECEIVER = "com.action.musicbox.musicreceiver";@Overridepublic IBinder onBind(Intent intent) {return null;}//Service创建时启动广播@Overridepublic void onCreate() {//创建BroadcastReceiverserviceReceiver = new MyReceiver();//创建IntentFilter注册该ReceiverIntentFilter filter = new IntentFilter();filter.addAction(MUSICRECEIVER);registerReceiver(serviceReceiver, filter);//创建MediaPlayermMediaPlayer = new MediaPlayer();//为mMediaPlayer播放完成事件绑定监听器mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {//发送广播通知MusicBox更改文本内容Intent intent = new Intent(MusicBox.MYRECEIVER_ACTION);intent.putExtra("current", "1");sendBroadcast(intent);}});super.onCreate();Log.i(TAG, "MusicService is oncreate");}/** * @param接收Service中的广播 * @author Administrator * */public class MyReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {int control = intent.getIntExtra("control", -1);switch(control){//播放或暂停case 1://播放状态if(state == 0x11){//歌曲暂时先写死prepareAndPlay(null);//修改状态state = 0x12;}//原来处于播放状态则暂停else if(state == 0x12){//暂停mMediaPlayer.pause();//修改状态state = 0x13;}//原来处于暂停状态的else if(state == 0x13){//播放mMediaPlayer.start();//修改状态state = 0x12;}break;//停止case 2:if(state == 0x12 || state == 0x13){//停止播放mMediaPlayer.stop();//修改状态state = 0x11;}break;default:break;}//创建一个Intent对象Intent sendIntent = new Intent(MusicBox.MYRECEIVER_ACTION);sendIntent.putExtra("update", state);Log.i(TAG, "MusicService is sendBroadcast");//发送广播,将被MusicBox中的BroadCastRecevier接收到sendBroadcast(sendIntent);}}/** * @param播放指定的音乐 * @param music */private void prepareAndPlay(String music){try {mMediaPlayer.reset();//装载音乐暂时写死!!mMediaPlayer.setDataSource("/mnt/sdcard/001.mp3");mMediaPlayer.prepare();//开始播放音乐mMediaPlayer.start();} catch (Exception e) {// TODO: handle exception}Log.i(TAG, "MusicService is prepareAndPlay");}}
总结
一个简单的音乐播放器,把Activity,Service,BroadCastRecevier结合使用了一下,感觉到了一点点的压力,不论是代码量还是业务逻辑。发现在敲代码前一定要想好写什么,为什么这么写,怎么写会更好。。。加油吧~~PS:原本下午就应该敲完,测试完并上传到博客中。。。可是今天是周末~适当的放松有益身心健康。
/** * @param 实现OnClickListener接口 * 统一管理OnClick事件 * @author Administrator * */public class MusicBox extends Activity implements OnClickListener {// 定义Log标签private static final String TAG = "MUSICBOX";// 声明控件对象private Button play, stop;private TextView show;private MusicRecevier musicRecevier;//当前的状态 0x11:没有播放0x12:正在播放0x13:暂停int state = 0x11;//声明其它组件的Action//Service的Actionpublic static final String SERVICE_ACTION = "com.service.musicbox";//发送给Service的广播public static final String MYRECEIVER_ACTION = "com.broadcast.musibox.myreceiver";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_music_box);Log.i(TAG, "MUSICBOX is onCreate");//获取布局控件init();musicRecevier = new MusicRecevier();//创建IntentFilterIntentFilter filter = new IntentFilter();//指定BroadCastRecevier监听的Actionfilter.addAction(MYRECEIVER_ACTION);//注册BroadCastRecevierregisterReceiver(musicRecevier, filter);//启动ServiceIntent intent = new Intent(SERVICE_ACTION);startService(intent);}@Overridepublic void onClick(View source) {//创建Intent对象,用于发送广播Intent intent = new Intent(MusicService.MUSICRECEIVER);switch(source.getId()){case R.id.play:intent.putExtra("control", 1);break;case R.id.stop:intent.putExtra("control", 2);break;default:break;}Log.i(TAG, "MUSICBOX is sendBroadcast");sendBroadcast(intent);}/** * @param接收MusicBox的广播 * @author Administrator * */public class MusicRecevier extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// 获取Intent中的update信息,updte代表播放状态int update = intent.getIntExtra("update", -1);//获取Intent中的current信息,current代表歌曲信息int current = intent.getIntExtra("current", -1);if(current >= 0){show.setText("new Music");}switch(update){case 0x11:show.setText("暂时没有歌曲播放");break;case 0x12:show.setText("歌曲正在播放");break;case 0x13:show.setText("歌曲播放暂停");break;default:break;}Log.i(TAG, "MUSICBOX is onReceive");}}/** * @param获取布局文件中的控件 */public void init(){play = (Button)this.findViewById(R.id.play);stop = (Button)this.findViewById(R.id.stop);play.setOnClickListener(this);stop.setOnClickListener(this);show = (TextView)this.findViewById(R.id.show);}}
MusicService.java
public class MusicService extends Service{//定义Log标签private static final String TAG="MusicService";//定义音乐播放器private MediaPlayer mMediaPlayer ;//当前的状态 0x11:没有播放0x12:正在播放0x13:暂停int state = 0x11;MyReceiver serviceReceiver;//定义MusicReceiver的Actionpublic static final String MUSICRECEIVER = "com.action.musicbox.musicreceiver";@Overridepublic IBinder onBind(Intent intent) {return null;}//Service创建时启动广播@Overridepublic void onCreate() {//创建BroadcastReceiverserviceReceiver = new MyReceiver();//创建IntentFilter注册该ReceiverIntentFilter filter = new IntentFilter();filter.addAction(MUSICRECEIVER);registerReceiver(serviceReceiver, filter);//创建MediaPlayermMediaPlayer = new MediaPlayer();//为mMediaPlayer播放完成事件绑定监听器mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {//发送广播通知MusicBox更改文本内容Intent intent = new Intent(MusicBox.MYRECEIVER_ACTION);intent.putExtra("current", "1");sendBroadcast(intent);}});super.onCreate();Log.i(TAG, "MusicService is oncreate");}/** * @param接收Service中的广播 * @author Administrator * */public class MyReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {int control = intent.getIntExtra("control", -1);switch(control){//播放或暂停case 1://播放状态if(state == 0x11){//歌曲暂时先写死prepareAndPlay(null);//修改状态state = 0x12;}//原来处于播放状态则暂停else if(state == 0x12){//暂停mMediaPlayer.pause();//修改状态state = 0x13;}//原来处于暂停状态的else if(state == 0x13){//播放mMediaPlayer.start();//修改状态state = 0x12;}break;//停止case 2:if(state == 0x12 || state == 0x13){//停止播放mMediaPlayer.stop();//修改状态state = 0x11;}break;default:break;}//创建一个Intent对象Intent sendIntent = new Intent(MusicBox.MYRECEIVER_ACTION);sendIntent.putExtra("update", state);Log.i(TAG, "MusicService is sendBroadcast");//发送广播,将被MusicBox中的BroadCastRecevier接收到sendBroadcast(sendIntent);}}/** * @param播放指定的音乐 * @param music */private void prepareAndPlay(String music){try {mMediaPlayer.reset();//装载音乐暂时写死!!mMediaPlayer.setDataSource("/mnt/sdcard/001.mp3");mMediaPlayer.prepare();//开始播放音乐mMediaPlayer.start();} catch (Exception e) {// TODO: handle exception}Log.i(TAG, "MusicService is prepareAndPlay");}}
总结
一个简单的音乐播放器,把Activity,Service,BroadCastRecevier结合使用了一下,感觉到了一点点的压力,不论是代码量还是业务逻辑。发现在敲代码前一定要想好写什么,为什么这么写,怎么写会更好。。。加油吧~~PS:原本下午就应该敲完,测试完并上传到博客中。。。可是今天是周末~适当的放松有益身心健康。
0 0
- 我的Android案例—MusicBox
- 关于musicbox的撰写
- 我的Android案例—HelloAndroid
- 我的Android案例—FirstActivity
- 我的Android案例—FirstBroadcastReceiver
- 我的Android案例—FirstContentProvider
- 我的Android案例—计算器
- 我的Android案例—电子词典
- 我的Android案例—签到日历
- 我的Android案例—文件管理器
- 我的Android案例—签到日历
- 【Android开发案例 - 我的下载图片】
- 10 musicBox 简单的音乐播放器 Broadcast
- node-webkit-MusicBox 基于nwjs ,html5 ,制作的音乐盒子
- 我的案例——登录
- 我的成功案例
- 我的开发案例作品
- 我的svg案例1
- 新年寄语
- JavaScript函数变参
- PHP Session机制解惑
- while循环、do..while 循环、for循环
- iOS App中的各类图标文件和启动图像文件
- 我的Android案例—MusicBox
- Js Map对象
- 排序算法php
- MYISAM 与 InnoDb 区别
- 杭电3188 Just A Triangle
- 取出以空格为分割的子串
- 负载均衡之LVS/DR模式
- SQLite集成与用法
- 几个常用的运算符