Android学习笔记:Service的调用与音乐播放
来源:互联网 发布:密码破译软件 编辑:程序博客网 时间:2024/06/05 12:07
作业要求:
编写Android程序, 定义一个Service实现歌曲的播放,在Activity中可以启动或停止这个Service实现后台播放音乐功能。
总体知识点:
1.了解Service的生存周期和用服务实现线程(线程我还没弄明白..)\
2.引用Android的MediaPlayer功能播放音乐
效果图:
1.停止界面
2.播放界面
..其实就是一个按钮Onclick的不同图片显示而已。。
实现步骤:
一.制作按钮图
用画图弄四个png格式的图片,分别是play play_press pause pause_press 表示播放/暂停 与播放按下时的图片与暂停按下时的图片
然后用ps或者其他软件,将白色部分修改成透明 我PS没下好 让别人随便帮忙抠了下
设置好之后 我们把图片文件都放到工程目录下的draw文件
然后说一下selector.xml
playselector.xml
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="false" android:drawable="@drawable/play" /> <item android:state_pressed="true" android:drawable="@drawable/play_press" /> <item android:state_window_focused="false" android:drawable="@drawable/play" /></selector>
整个xml 可以作为drawable资源来使用 比如R.drawable.playselector
上面的代码表示 这个资源 在按下的时候或者默认的时候 显示那一张图片
二.使用Service
我们用MusicService来继承Service
然后重写Service的各种方法
onStart() onCreate() onDestory() onBind()等
Service 运行之后 直到使用onDestory 或者运行过程完成 又或者 对服务进行卸载(即强制停用)
三.使用MediaPlayer
为了方便读取文件,我们把一首歌放进工程目录下的res/raw文件夹,作为默认资源,方便读取
我选了GEM的偶尔 最近比较喜欢 改名成为oer.mp3
可以通过下面的语句引用,不过我们只是把他放到Service里面触发调用而已
private MediaPlayer MPlayer;
MPlayer=MediaPlayer.create(getApplicationContext(), R.raw.oer);
四.具体代码实现
1.整体类图
2.MusicService.java
package bnuz.Aquariuslt.musiclite;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.IBinder;import android.widget.Toast;public class MusicService extends Service{private MediaPlayer MPlayer;@Overridepublic IBinder onBind(Intent intent) {return null;}public boolean onUnbind(Intent intent) {Toast.makeText(this, "停止服务" , Toast.LENGTH_SHORT).show(); MPlayer.stop(); return super.onUnbind(intent);}//onCreate 方法在服务还没存在的时候 被调用public void onCreate(){super.onCreate(); Toast.makeText(this, "首次调用onCreate方法,音乐开始播放" , Toast.LENGTH_SHORT).show(); MPlayer=MediaPlayer.create(getApplicationContext(), R.raw.oer);}@SuppressWarnings("deprecation")public void onStart(Intent intent, int startId){super.onStart(intent, startId);Toast.makeText(this, "启动服务" , Toast.LENGTH_SHORT).show();MPlayer.start();}public void onDestory(){ super.onDestroy(); MPlayer.stop();}}
3.Player.java
package bnuz.Aquariuslt.musiclite;import android.os.Bundle;import android.os.IBinder;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageButton;public class Player extends Activity {ImageButton PlayPause;boolean PFlag = true;// true表示顯示play false 表示顯示pauseIntent intent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.play);intent=new Intent(Player.this,MusicService.class);PlayPause = (ImageButton) this.findViewById(R.id.PlayPause);PlayPause.setOnClickListener(ButtonPlayListener);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.player, menu);return true;}//用于切换 播放/暂停按钮View.OnClickListener ButtonPlayListener = new OnClickListener() {public void onClick(View v) {if (PFlag == true) {PlayPause.setImageResource(R.drawable.pauseselector);startService(intent);bindService(intent,conn,Context.BIND_AUTO_CREATE); PFlag = false;} else {PlayPause.setImageResource(R.drawable.playselector);stopService(intent);unbindService(conn);PFlag = true;}}}; final ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { } }; }
4.play.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:background="@drawable/bgimage" tools:context=".Player" > <ImageButton android:id="@+id/PlayPause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="46dp" android:background="#00000000" android:contentDescription="@string/playdesc" android:src="@drawable/playselector" /> <TextView android:id="@+id/Author" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="38dp" android:text="@string/Author" android:textAppearance="?android:attr/textAppearanceLarge" /></RelativeLayout>
APK文件下载地址
http://download.csdn.net/detail/u011501908/6742355
- Android学习笔记:Service的调用与音乐播放
- Android组件学习笔记(简单音乐播放器,service与intent)
- Android学习笔记(七) 音乐播放器 Service实现
- Android学习笔记(21)---使用Service后台播放MediaPlayer的音乐
- Android 初步学习BroadCast与Service实现简单的音乐播放器
- Android初步学习BroadCast与Service实现简单的音乐播放器
- android 音乐播放service
- Android Service播放音乐
- Android基于Service服务的音乐播放
- Android的音乐播放器使用service
- Android service学习总结和利用service实现的后台音乐播放功能
- Android学习笔记——播放音乐
- android 之 Service 播放音乐
- android-service音乐播放器
- android,service实例,播放音乐
- 通过Service播放音乐【Android】
- Android Service 音乐播放器
- android Service后台播放音乐
- 算法之旅,直奔<algorithm>之十七 find_first_of
- 字节序问题--大端法小端法
- Using Putty on Windows to login Linux securely via OpenSSH
- STM32 USB DFU设备固件升级 工程讲解
- STM32 USB 使用芯片内部flash模拟U盘
- Android学习笔记:Service的调用与音乐播放
- DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别
- DMA学习资料
- The OS for Car
- 大数据推理
- UVA 11134 - Fabled Rooks(贪心+优先队列)
- 草根站长的你是感觉自豪还是苦逼
- Hibernate的session.flush做了什么呢?
- opengl