android之BroadcastReceiver实例

本文介绍了如何在Android中使用BroadcastReceiver进行监听。首先,需要创建BroadcastReceiver子类并在manifest文件中注册,设置特定的Action。然后,利用Intent广播消息,区分普通广播与有序广播,有序广播允许接收者按优先级顺序处理并能影响前一个接收者的消息。
摘要由CSDN通过智能技术生成

BroadcastReceiver监听步骤

1.实现BroadcastReceiver子类 ,并在androidmainfest.xml注册监听者,并设置action属性

public class MyReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		Toast.makeText(
				context,
				intent.getAction() + "\n消息的内容是:" + intent.getStringExtra("msg"),
				Toast.LENGTH_LONG).show();

	}

}

        <receiver 
            android:name="com.android.xiong.bordcasetestonetest.MyReceiver">
           <intent-filter>
               <action android:name="com.android.xiong.bordcasetestonetest.MYRECEIVER"/>
           </intent-filter>
        </receiver>

2.创建Intent对象 并设置Action属性,然后广播消息(广播有两种 一种是普通广播,一种是 有序广播;有序广播是通过设置优先级来一个一个来接收广播信息 接收的后者可以得到前接收者的广播修改信息)

		//创建Intent对象
				Intent intent=new Intent();
				intent.setAction("com.android.xiong.bordcasetestonetest.MYRECEIVER");
				intent.putExtra("msg", "简单的消息");
				//发送广播
				sendBroadcast(intent);

实例

package com.example.musicbox;

import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

	private TextView title, author;
	private Button play, stop;
	public static final String CTL_ACTION = "com.android.xiong.CTL_ACTION";
	public static final String UPDATE_ACTION = "com.android.xiong.UPDATE_ACTION";
	// 定义音乐的播放状态 0x11代表没有播放 0x12表示正在播放 0x13表示暂停中
	int status = 0x11;
	String[] titleStrs = new String[] { "心愿", "约定", "美丽的新世界" };
	String[] authorStrs = new String[] { "未知艺术家", "周蕙", "五百" };
	private ActivityReceiver activitys;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		title = (TextView) findViewById(R.id.title);
		author = (TextView) findViewById(R.id.author);
		play = (Button) findViewById(R.id.play);
		stop = (Button) findViewById(R.id.stop);
		play.setOnClickListener(this);
		stop.setOnClickListener(this);
		// 创建IntentFilter
		IntentFilter filter = new IntentFilter();
		filter.addAction(UPDATE_ACTION);
		activitys = new ActivityReceiver();
		registerReceiver(activitys, filter);
		Intent intentService = new Intent(this, MusicService.class);
		// 启动Service
		startService(intentService);

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	// 自定义的BoradcastReceiver,负责监听从Serive传回来的广播
	public class ActivityReceiver extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			// 获取Intent中的update消息 ,update代表播放状态
			int update = intent.getIntExtra("update", -1);
			// 获取Intent中的current消息,current代表当前正在播放的歌曲
			int current = intent.getIntExtra("current", -1);
			if (current >= 0) {
				title.setText(titleStrs[current]);
				author.setText(authorStrs[current]);
			}
			switch (update) {
			case 0x11:
				status = 0x11;
				break;
			// 控制系统进入播放状态
			case 0x12:
				status = 0x12;
				break;
				//控制系统进入暂停状态
			case 0x13:
				status = 0x13;
				break;
			}

		}

	}

	@Override
	public void onClick(View v) {
		// 创建Intent
		Intent intent = new Intent("com.android.xiong.CTL_ACTION");
		switch (v.getId()) {
		case R.id.play:
			intent.putExtra("control", 1);
			break;
		case R.id.stop:
			intent.putExtra("control", 2);
			break;
		default:
			break;
		}
		//发送广播
		sendBroadcast(intent);

	}
}
package com.example.musicbox;

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;

public class MusicService extends Service {

	MyReceviver serviceReceviver;
	AssetManager am;
	String[] musics = new String[] { "wish.mp3", "promise.mp3", "beautiful.mp3" };
	MediaPlayer mPlayer;
	// 当前的状态,0x11代表没有播放;0x12代表正在播放;0x13代表暂停
	int status = 0x11;
	// 记录当前正在播放的音乐
	int current = 0;

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	@Override
	public void onCreate() {
		am = getAssets();
		// 创建BroadcastRecer
		serviceReceviver = new MyReceviver();
		// 创建IntentFilter
		IntentFilter filter = new IntentFilter();
		filter.addAction(MainActivity.CTL_ACTION);
		registerReceiver(serviceReceviver, filter);
		// 创建MediaPlay播放完成事件绑定的监听器
		mPlayer = new MediaPlayer();
		mPlayer.setOnCompletionListener(new OnCompletionListener() {

			@Override
			public void onCompletion(MediaPlayer mp) {
				current++;
				if (current >= 3) {
					current = 0;
				}
				// 发送广播通知的activity更改文本
				Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION);
				sendIntent.putExtra("current", current);
				// 发送广播,将被activity组件的BroadcastReceiver接收
				sendBroadcast(sendIntent);
				// 准备并播放音乐
				preparAndplay(musics[current]);

			}
		});
		super.onCreate();
	}

	public class MyReceviver extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			int control = intent.getIntExtra("control", -1);
			switch (control) {
			//播放或暂停
			case 1:
				//原来处于没有播放状态
				if(status==0x11){
					//准备并播放音乐
					preparAndplay(musics[current]);
					status=0x12;
				}
				//原来处于播放的状态
				else if(status==0x12){
					//暂停
					mPlayer.pause();
					//改变为暂停的状态
					status=0x13;
				}
				//原来处于暂停的状态
				else if(status==0x13){
					//播放
					mPlayer.start();
					//改变为播放状态
					status=0x12;
				}
				break;
				//停止播放
			case 2:
			//如果原来正在播放
				if(status==0x12||status==0x13){
					//停止播放
					mPlayer.stop();
					status=0x11;
				}
			default:
				break;
			}
			//广播通知Activity更改文本
			Intent sendIntent=new Intent(MainActivity.UPDATE_ACTION);
			sendIntent.putExtra("update", status);
			sendIntent.putExtra("current",current);
			//发送广播
			sendBroadcast(sendIntent);
		}

	}

	private void preparAndplay(String music) {
		try {
			// 打开指定的文件
			AssetFileDescriptor afd = am.openFd(music);
			mPlayer.reset();
			// 使用MediaPlayer加载指定的文件
			mPlayer.setDataSource(afd.getFileDescriptor(),
					afd.getStartOffset(), afd.getLength());
			// 准备声音
			mPlayer.prepare();
			// 播放
			mPlayer.start();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值