`

service和BroadcastReceive控制的音乐播放器

阅读更多
package cn.com.dne.activity.ceshi;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class LinearActivity extends  Activity implements OnClickListener{
	ImageButton start;//播放、暂停按钮
	ImageButton stop;//停止按钮
	ActivityReceiver activityReceiver;
	int status = 1;//当前的状态,1没有声音播放 ,2 正在播放声音,3暂停
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {//重写的onCreate方法
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);//设置当前的用户界面
        start = (ImageButton) this.findViewById(R.id.start);//得到start的引用
        stop = (ImageButton) this.findViewById(R.id.stop);//得到stop按钮的引用
        start.setOnClickListener(this);//为按钮添加监听
        stop.setOnClickListener(this);//为按钮添加监听
        activityReceiver = new ActivityReceiver();//创建BroadcastReceiver
        IntentFilter filter = new IntentFilter();//创建IntentFilter过滤器
        filter.addAction("wyf.ytl.update");//添加Action
        registerReceiver(activityReceiver, filter);//注册监听
        Intent intent = new Intent(this, MyService.class);//创建Intent
        startService(intent);//启动后台Service
    }
    public class ActivityReceiver extends BroadcastReceiver{//自定义的BroadcastReceiver
		@Override
		public void onReceive(Context context, Intent intent) {//重写的onReceive方法
			// TODO Auto-generated method stub
			int update = intent.getIntExtra("update", -1);//得到intent中的数据
			switch(update){//分支判断
			case 1://没有声音播放
				status = 1; //设置当前状态
				break;
			case 2://正在播放声音
				start.setImageResource(R.drawable.png3);//更换图片
				status = 2; //设置当前状态
				break;
			case 3://暂停中
				start.setImageResource(R.drawable.png2);//更换图片
				status = 3; //设置当前状态
				break;
			}
		}
    }
	public void onClick(View v) {//接口中的方法
		// TODO Auto-generated method stub
		Intent intent = new Intent("wyf.ytl.control");//创建Intent
		switch(v.getId()){//分支判断
		case R.id.start://按下播放、暂停按钮
			intent.putExtra("ACTION", 1);//存放数据
			sendBroadcast(intent);//发送广播
			break;
		case R.id.stop://按下停止按钮
			intent.putExtra("ACTION", 2);//存放数据
			sendBroadcast(intent);//发送广播
			break;
		}
	}
	@Override
	protected void onDestroy() {//释放时被调用
		// TODO Auto-generated method stub
		super.onDestroy();
        Intent intent = new Intent(this, MyService.class);//创建Intent
        stopService(intent);//停止后台的Service
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu){//弹出菜单 
		menu.add(0,Menu.FIRST,0,"退出")
			.setIcon(android.R.drawable.ic_menu_delete);//设置图标
		return true;
	}
	@Override
	public boolean onOptionsItemSelected(MenuItem item){//选择的菜单项
		switch(item.getItemId()){//分支判断
		case Menu.FIRST:
			showDialog(1);//显示对话框
			break;
		}
		//将来可在此进行扩展
		return false;
	}
	@Override
	protected Dialog onCreateDialog(int id){//创建对话框
		switch(id){//判断
		case 1:
			return new AlertDialog.Builder(this)
				.setTitle("您确定退出?")
				.setPositiveButton("确定", new android.content.DialogInterface.OnClickListener(){
			
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						System.exit(0);//直接退出
					}
				})
				.setNegativeButton("取消", null)//取消按钮
				.create();
		default:
			return null;
		}
	}
}

 

package cn.com.dne.activity.ceshi;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.MediaPlayer;
import android.os.IBinder;

public class MyService extends Service{
	MediaPlayer mp;
	ServiceReceiver serviceReceiver;
	int status = 1;//当前的状态,1没有声音播放 ,2 正在播放声音,3暂停
	@Override
	public IBinder onBind(Intent intent) {//重写的onBind方法
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public void onCreate() {//重写的onCreate方法
		// TODO Auto-generated method stub		
		status = 1;
		serviceReceiver = new ServiceReceiver();//创建BroadcastReceiver
		IntentFilter filter = new IntentFilter();//创建过滤器
		filter.addAction("wyf.ytl.control");//添加Action
		registerReceiver(serviceReceiver, filter);//注册BroadcastReceiver
		super.onCreate();
	}
	@Override
	public void onDestroy() {//重写的onDestroy方法
		// TODO Auto-generated method stub
		unregisterReceiver(serviceReceiver);//取消注册
		super.onDestroy();
	}
	public class ServiceReceiver extends BroadcastReceiver{//自定义BroadcastReceiver
		@Override
		public void onReceive(Context context, Intent intent) {//重写的响应方法
			// TODO Auto-generated method stub
			int action = intent.getIntExtra("ACTION", -1);//得带需要的数据
			switch(action){
			case 1://播放或暂停声音
				if(status == 1){//当前没有声音播放
					mp = MediaPlayer.create(context, R.raw.nx);
					status = 2;
					Intent sendIntent = new Intent("wyf.ytl.update");
					sendIntent.putExtra("update", 2);
					sendBroadcast(sendIntent);
					mp.start();
				}
				else if(status == 2){//正在播放声音
					mp.pause();	//停止
					status = 3;//改变状态 
					Intent sendIntent = new Intent("wyf.ytl.update");
					sendIntent.putExtra("update", 3);//存放数据
					sendBroadcast(sendIntent);//发送广播
				}
				else if(status == 3){//暂停中
					mp.start();//播放声音
					status = 2;//改变状态
					Intent sendIntent = new Intent("wyf.ytl.update");
					sendIntent.putExtra("update", 2);//存放数据
					sendBroadcast(sendIntent);//发送广播
				}
				break;
			case 2://停止声音
				if(status == 2 || status == 3){//播放中或暂停中
					mp.stop();//停止播放
					status = 1;//改变状态
					Intent sendIntent = new Intent("wyf.ytl.update");
					sendIntent.putExtra("update", 1);//存放数据
					sendBroadcast(sendIntent);//发送广播
				}
			}
		}
	}
}

 

分享到:
评论

相关推荐

    基于Service的简易音乐播放器

    此外,为了提供更好的用户体验,还可以实现播放进度的显示和控制,这可能涉及到`MediaPlayer`的`getDuration()`和`getCurrentPosition()`方法。 综上所述,基于Service的简易音乐播放器涉及到Android的Service组件...

    本地service练习,简易音乐播放器

    本项目"本地Service练习,简易音乐播放器"旨在教你如何利用Service组件创建一个后台运行的音乐播放应用。让我们深入探讨一下这个练习涉及到的关键知识点。 1. **Android Service** - **Service的基本概念**:...

    android音乐播放器service学习案例

    本案例“android音乐播放器service学习案例”着重讲解如何利用Service来实现一个音乐播放器,使音乐能够在后台持续播放。 首先,我们需要了解Android Service的基础知识。Service分为两种类型:标准服务...

    Android 带进度条的使用Service实现的音乐播放器

    本项目"Android 带进度条的使用Service实现的音乐播放器"聚焦于如何在后台Service中使用MediaPlayer类来实现音乐播放,并结合UI界面展示播放进度。以下是这个项目涉及到的关键知识点: 1. **Android Service**: ...

    音乐播放器bindservice和startService

    本篇文章将详细讲解如何利用`bindService`和`startService`来实现音乐播放功能,这两种服务启动方式在音乐播放器中的应用场景及优缺点。 首先,我们了解`Service`在Android系统中的作用。`Service`是一种后台运行的...

    通过Service模拟音乐播放器

    本示例将探讨如何利用Service来构建一个简单的音乐播放器,实现播放、暂停和停止音乐的功能。 首先,我们需要创建一个新的Service类,继承自Android的Service基类。在Service中,我们将实现音乐播放的核心逻辑。...

    基于Android Studio开发的音乐播放器APP源码Android 音乐播放器源码

    音乐播放器通常包含歌曲列表、播放控制、音量调节、播放模式选择(单曲循环、列表循环等)等界面组件。 5. **服务(Service)组件**: 为了在后台持续播放音乐,开发者会使用Android的Service组件。Service可以在...

    Service服务的android音乐播放器

    在Android平台上,开发一款音乐播放器应用是常见的需求,而`Service`是实现后台持续运行功能的关键组件。本文将深入探讨如何利用`Service`服务来构建一个音乐播放器,同时结合`MediaPlayer`类来处理音频播放。 首先...

    安卓音乐播放器相关-原生Android4.4音乐播放器源码原封未动原滋原味的代码学习最基本播放器框架.rar

    在Android平台上,开发一款音乐播放器是常见的任务之一,它涉及到多媒体处理、用户...通过学习和分析源码,你可以掌握如何实现音乐的播放、暂停、切换、音量控制等功能,为后续更复杂的音乐播放器开发打下坚实的基础。

    Android实例源码-音乐播放器类安卓源代码(9例).zip

    Android实例源码-音乐播放器类安卓源代码(9例) ...简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片 边下载边播music 音乐播放器 音乐播放器 音乐播放器源码

    黑马程序员安卓教程:Android中服务的调用案例-音乐播放器宣贯.pdf

    在这个案例中,我们需要创建一个音乐播放器,能够在后台播放音乐,并在界面上控制音乐播放器。为了达到这个需求,我们需要使用 Android 中的服务来播放音乐,并在界面上使用按钮来控制音乐播放器。 布局 在这个...

    音乐播放器源码以及课程设计报告

    5. **通知栏控制**:为了让用户在任何界面都能控制音乐,我们会使用Notification进行界面展示和交互。通过NotificationCompat.Builder,我们可以创建带有播放控制的系统通知。 6. **广播接收器**:为了响应媒体按键...

    简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片.zip

    总之,这个简单的Android音乐播放器通过Service实现后台播放,使用异步线程加载图片,展现了Android开发中服务组件、多媒体处理和多线程编程的关键技术。通过深入理解和实践这些知识点,开发者能够构建出更加完善的...

    Android实现音乐播放器——课程设计报告,优秀课设

    【Android实现音乐播放器——课程设计报告,优秀课设】是一个关于移动应用开发的课程设计项目,主要目标是让学生熟练掌握Android程序开发的各种技术,包括基础的UI界面设计、数据存储、Activity、Service、SQLite...

    Android简易本地音乐播放器源码,基于Android的简易本地音乐播放器源码

    在这个播放器中,可能会有用于播放音乐的Activity和Service。 3. **Activity与Intent**:Activity是用户界面的主要组件,播放器的界面可能包含多个Activity,如主界面、播放界面等。Intent用于在Activity之间传递...

    android音乐播放器demo

    总结来说,开发Android音乐播放器涉及的知识点包括:MediaPlayer类的使用,音频文件的加载和播放控制,UI设计和事件处理,MediaStore接口的运用以访问音乐库,以及项目结构和最佳实践。通过深入理解和实践“android...

    完整的音乐播放器源码

    音乐播放器是移动设备上常见的应用程序,它允许用户播放、管理和组织他们的音乐收藏。本篇将深入探讨一个基于Android平台的完整音乐播放器源码,帮助开发者理解其基本架构和核心功能。 首先,我们关注的是"音乐"这...

    Android开发音乐播放器

    Android音乐播放器实战,实现本地歌曲播放控制,可后台播放,拔出耳机暂停,来电暂停,电话挂断继续播放。这个项目很好的结合了Android的四大组件知识。其中音乐来源于手机本地,使用了Content Provider获取,播放...

Global site tag (gtag.js) - Google Analytics