BroadcastReceiver监听步骤

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

public class MyReceiver extends BroadcastReceiver {@Overridepublic 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;@Overrideprotected 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);// 创建IntentFilterIntentFilter filter = new IntentFilter();filter.addAction(UPDATE_ACTION);activitys = new ActivityReceiver();registerReceiver(activitys, filter);Intent intentService = new Intent(this, MusicService.class);// 启动ServicestartService(intentService);}@Overridepublic 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 {@Overridepublic 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;}}}@Overridepublic void onClick(View v) {// 创建IntentIntent 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;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {am = getAssets();// 创建BroadcastRecerserviceReceviver = new MyReceviver();// 创建IntentFilterIntentFilter filter = new IntentFilter();filter.addAction(MainActivity.CTL_ACTION);registerReceiver(serviceReceviver, filter);// 创建MediaPlay播放完成事件绑定的监听器mPlayer = new MediaPlayer();mPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic 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 {@Overridepublic 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();}}}


更多相关文章

  1. Android消息通知Totast的实现
  2. android之监听手机来电状态
  3. Android应用程序键盘(Keyboard)消息处理机制分析(23)
  4. Android屏幕中隐藏标题栏和状态栏
  5. Android完全隐藏状态栏,毛都不剩的那种!!!
  6. android 开发过程中对网络状态的判断的工具类
  7. 状态栏去掉机主图标

随机推荐

  1. Android相对布局属性
  2. flutter 与 android 混合开发 以及 Andro
  3. 从0到1实现一个Android路由(4)——多模块
  4. 横竖屏切换 android:screenOrientation属
  5. Android开发随想:iPhone和Android之间的对
  6. android高仿小视频、应用锁、3种存储库、
  7. 如何使android应用程序使用当前的主题样
  8. Android中IPC框架的理解
  9. Android SDK 2.0安装、配置图文教程
  10. android开发每日汇总【2011-11-26】