`
爱阳阳
  • 浏览: 10055 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Service实例-播放mp3音乐

阅读更多
1.在main.xml中加入如下四个按钮
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
     <Button android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:id="@+id/button1"
    android:text="开启音乐播放服务"/>
    
     <Button android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:id="@+id/button2"
    android:text="停止音乐播放服务"/>
    
     <Button android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:id="@+id/button3"
    android:text="绑定音乐播放服务"/>
    
     <Button android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:id="@+id/button4"
    android:text="解绑定音乐播放服务"/>


2.在res目录下新建raw目录,并拷入mp3文件,我的是www.mp3
创建如下Service

public class HelloService extends Service {

	MediaPlayer mp;//定义音乐播放器变量
	private final static String TAG = "HelloService";

	@Override
	//绑定服务     通过  bindService 方法启动服务时调用
	public IBinder onBind(Intent intent) {
		Toast.makeText(this, "onBind(Intent intent)",Toast.LENGTH_SHORT).show();
		mp.start();
		return null;
	}

	@Override
	//解绑定服务   通过  unbindService 方法解绑定服务时调用
	public boolean onUnbind(Intent intent) {
		Toast.makeText(this, "onUnbind(Intent intent)",Toast.LENGTH_SHORT).show();
		
		mp.stop();
		return false;
	}

	@Override
	//创建服务    该服务不存在需要被创建时被调用,不管startService()还是bindService()都会在启动时调用该方法 
	public void onCreate() {
		Toast.makeText(this, "onCreate()",Toast.LENGTH_SHORT).show();
		//创建一个音乐播放器对象
		mp = MediaPlayer.create(this.getApplicationContext(), R.raw.www);
		 //设置可以重复播放
		mp.setLooping(true);
	}

	@Override  
	//停止服务服务   通过  onDestroy 方法停止服务时调用
	public void onDestroy() {
		Toast.makeText(this, "onDestroy()",Toast.LENGTH_SHORT).show();
		mp.stop();

	}

	@Override
	//开始服务    通过  onStart 方法开始服务时调用
	public void onStart(Intent intent, int startId) {
		Toast.makeText(this, "onStart",Toast.LENGTH_SHORT);
		mp.start();

	}

}

3.在AndroidManifest.xml文件中注册Service
	<application android:icon="@drawable/icon" android:label="@string/app_name">
		<activity android:name=".MainActivity" 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=".service.HelloService"></service>
	</application>


4.Activity中的代码

public class MainActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 获取页面组件
		Button button1 = (Button) this.findViewById(R.id.button1);
		Button button2 = (Button) this.findViewById(R.id.button2);
		Button button3 = (Button) this.findViewById(R.id.button3);
		Button button4 = (Button) this.findViewById(R.id.button4);

		// 定义服务链接对象 -要启动哪个服务
		final ServiceConnection sc = new ServiceConnection() {

			@Override
			public void onServiceDisconnected(ComponentName name) {
				Toast.makeText(MainActivity.this,
						"ServiceConnection onServiceDisconnected",
						Toast.LENGTH_SHORT).show();

			}

			@Override
			public void onServiceConnected(ComponentName name, IBinder service) {
				Toast.makeText(MainActivity.this,
						"ServiceConnection onServiceConnected",
						Toast.LENGTH_SHORT).show();

			}
		};
		// 定义监听事件
		OnClickListener ocl = new OnClickListener() {

			//在意图中指定服务
			Intent intent = new Intent(MainActivity.this, HelloService.class);

			@Override
			public void onClick(View v) {
				switch (v.getId()) {
				case R.id.button1:
					startService(intent);
					break;
				case R.id.button2:
					stopService(intent);
					break;
				case R.id.button3:
					// 绑定启动要指定服务链接对象,绑定的操作选项
					bindService(intent, sc, Context.BIND_AUTO_CREATE);
					break;
				case R.id.button4:
					unbindService(sc);
					break;
				}

			}
		};
		//为按钮加点击事件
		button1.setOnClickListener(ocl);
		button2.setOnClickListener(ocl);
		button3.setOnClickListener(ocl);
		button4.setOnClickListener(ocl);
	}
}


5.从这个例子中我们可以体会到Context.startService()方法和Context.bindService()方法的区别
在模拟器中点击开启音乐播放服务后,播放音乐,此时点击右侧的回退按钮,音乐仍然播放。但是通过绑定音乐播放服务启动的音乐,在点击回退按钮后,音乐也停止了播放,说明通过这种方式启动的服务是与Context绑定的。
分享到:
评论

相关推荐

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础知识到高级应用各个层面约600个实例及源代码,每个实例都按实例说明、关键技术、设计过程、详尽注释、秘笈心法的顺序进行了分析解读。全书分6篇共25章,主要...

    android开发实例大全_王东华

    实例099: 播放一个指定的MP3文件 346 实例100: 调节手机音量的大小 350 实例101: 实现相机预览和拍照功能 353 实例102: 在手机中播放影片 360 实例103: 手机录音系统 363 实例104: 设置手机中的铃声 368 实例...

    Android service类的应用及源码例子.rar

    Android service类的应用及源码例子,通过Android service类创建一个音乐服务模块,演示service类的创建、启动和方法使用,以及Service生命周期的说明,该例子继承service 然后重写onStart播放音乐 重写onDestry停止...

    C#程序开发范例宝典(第2版).part13

    实例180 学校体操定时音乐播放 258 实例181 播放系统自带的事件声音 259 实例182 获取MP3文件的歌词 260 实例183 M3U文件的创建及删除 264 实例184 获取MP3文件的播放时间 267 实例185 异步加载并播放声音文件 ...

    C#程序开发范例宝典(第2版).part08

    实例180 学校体操定时音乐播放 258 实例181 播放系统自带的事件声音 259 实例182 获取MP3文件的歌词 260 实例183 M3U文件的创建及删除 264 实例184 获取MP3文件的播放时间 267 实例185 异步加载并播放声音文件 ...

    C#程序开发范例宝典(第2版).part02

    实例180 学校体操定时音乐播放 258 实例181 播放系统自带的事件声音 259 实例182 获取MP3文件的歌词 260 实例183 M3U文件的创建及删除 264 实例184 获取MP3文件的播放时间 267 实例185 异步加载并播放声音文件 ...

    C#程序开发范例宝典(第2版).part12

    实例180 学校体操定时音乐播放 258 实例181 播放系统自带的事件声音 259 实例182 获取MP3文件的歌词 260 实例183 M3U文件的创建及删除 264 实例184 获取MP3文件的播放时间 267 实例185 异步加载并播放声音文件 ...

    C#.net_经典编程例子400个

    mid-wav文件 226 实例154 获取多媒体详细信息列表 227 5.2 MP3、WAV播放 228 实例155 带记忆功能的MP3播放器 228 实例156 自动播放的MP3播放器 231 实例157 学校体操定时音乐播放 233 ...

    新版Android开发教程.rar

    � GPS 卫星导航功能,手机照相, MP3 ,蓝芽等均被列为 Android 所提供支持的基本选项。 � Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金; Android 的 程序可以采用 JAVA ...

Global site tag (gtag.js) - Google Analytics