Android四大组件之四:BroadcastReceiver 广播接收器

来源:互联网 发布:上瘾网络剧见面会 编辑:程序博客网 时间:2024/04/29 10:51
1.BroadcastReceiver 广播接收器 (Android四大组件之一)
  [1]用途:接收广播。可以接收系统广播,可以接收其它应用程序的广播,可以接收其它组件的广播。
  [2]生命周期:只有十秒种,不能在广播接收器中做耗时的操作。
  [3]注意:如果接收系统广播,需要添加权限。
           接收广播的种类在清单文件中设置
            <intent-filter >
                <!-- 设置广播接收器可以接收开机广播 -->
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
  
package com.farsight.broadcastreceiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.sax.StartElementListener;import android.widget.Toast;public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString info = intent.getStringExtra("info");Toast.makeText(context, "收到广播:"+info, Toast.LENGTH_SHORT).show();Intent intentA = new Intent();intentA.setClass(context, Android_39_BroadcastReceiverActivity.class);//在非Activity组件中启动活动,需要加标记intentA.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intentA);}}

package com.farsight.activityandservice;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;public class Android_41_ActivityAndServiceActivity extends Activity implements OnClickListener {TextView tv;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// Activity组件接收Service组件发送的广播// Service 向 Activity 发送广播//在当前activity对象上注册广播接收器this.registerReceiver(myReceiver, new IntentFilter("com.farsight.activityandservice.activity"));findViewById(R.id.button1).setOnClickListener(this);tv = (TextView) findViewById(R.id.textView1);}MyReceiver myReceiver = new MyReceiver();class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubint count = intent.getIntExtra("count", -1);tv.setText(String.valueOf(count));}}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();//注销广播接收器this.unregisterReceiver(myReceiver);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent();intent.setClass(this, MyService.class);startService(intent);}}
package com.farsight.activityandservice;import android.app.Service;import android.content.Intent;import android.os.IBinder;public class MyService extends Service implements Runnable {@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();new Thread(this).start();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// TODO Auto-generated method stubreturn super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();}@Overridepublic void run() {// TODO Auto-generated method stubint count = 0;//每隔一秒钟,向活动发送数据while(true){count++;Intent intent = new Intent();intent.setAction("com.farsight.activityandservice.activity");intent.putExtra("count", count);sendBroadcast(intent);try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}



2.Android多媒体编程
  [1]多媒体文件:图片文件 png jpg gif
                 音频     mp3 ogg mid
                 视频     mp4 3gp
  [2]音乐播放器  MediaPlayer  --- 播放音乐
                 SoundPlayer  --- 播放音效
  [3]MediaPlayer                                             从sdcard载入音乐文件
                 MediaPlayer.create(this, R.raw.music_01)    从res/raw下载入音乐文件
                 start()                                     播放音乐

                 pause()                                     暂停音乐

package com.farsight.mediaplayer;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;import android.widget.TextView;public class Android_37_MediaPlayerActivity extends Activity implements OnClickListener, OnSeekBarChangeListener {    TextView tvSize;TextView tvCurrent;SeekBar seekBar;/** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);               findViewById(R.id.button1).setOnClickListener(this);        findViewById(R.id.button2).setOnClickListener(this);        findViewById(R.id.button3).setOnClickListener(this);                tvSize = (TextView) findViewById(R.id.textView1);        tvCurrent = (TextView) findViewById(R.id.textView2);        seekBar = (SeekBar) findViewById(R.id.seekBar1);                seekBar.setOnSeekBarChangeListener(this);                this.registerReceiver(receiver, new IntentFilter("receive music data"));    }    MyReceiver receiver = new MyReceiver();    class MyReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubint size = intent.getIntExtra("size", -1);if(size != -1){tvSize.setText(timeFormat(size));seekBar.setMax(size);}int current = intent.getIntExtra("current", -1);tvCurrent.setText(timeFormat(current));seekBar.setProgress(current);}        }        Intent intent = new Intent();@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(v.getId() == R.id.button1){intent.setClass(this, PlayMusicService.class);intent.putExtra("control", "play");startService(intent);}else if(v.getId() == R.id.button2){intent.setClass(this, PlayMusicService.class);intent.putExtra("control", "pause");startService(intent);}else if(v.getId() == R.id.button3){//退出音乐播放器//暂停音乐并回收音乐资源//关闭子线程intent.setClass(this, PlayMusicService.class);intent.putExtra("control", "destroy");startService(intent);//销毁activityfinish();}}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();this.unregisterReceiver(receiver);}//将毫秒转换为分钟显示private String timeFormat(int millionSecond){String format = "";int minutes = millionSecond/1000/60;if(minutes < 10){format += "0"+minutes;}else{format += minutes;}format += ":";int second = millionSecond/1000%60;if(second < 10){format += "0"+second;}else{format += second;}return format;}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {// TODO Auto-generated method stub}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {// TODO Auto-generated method stubintent.setClass(this, PlayMusicService.class);intent.putExtra("control", "pause");startService(intent);}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {// TODO Auto-generated method stubintent.setClass(this, PlayMusicService.class);intent.putExtra("control", "seekTo");//intent.putExtra("target", seekBar.getProgress());startService(intent);}}
package com.farsight.mediaplayer;import java.io.IOException;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.os.IBinder;public class PlayMusicService extends Service implements Runnable,OnCompletionListener {// 音乐播放器对象// 控制音乐播放MediaPlayer mediaPlayer;boolean isRun;@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();// 当前音乐播放时间// mediaPlayer.getCurrentPosition();// 改变音乐当前的播放位置,传入的参数为时间值// mediaPlayer.seekTo(mediaPlayer.getDuration()/2);nextMusic();isRun = true;new Thread(this).start();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// TODO Auto-generated method stubString control = intent.getStringExtra("control");if (control.equals("play"))mediaPlayer.start();else if (control.equals("pause"))mediaPlayer.pause();else if (control.equals("seekTo")) {mediaPlayer.seekTo(intent.getIntExtra("target", 0));mediaPlayer.start();} else if (control.equals("destroy")) {mediaPlayer.stop();mediaPlayer.release(); // 回收音乐资源isRun = false; // 关闭线程}return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void run() {// TODO Auto-generated method stubwhile (isRun) {// 检测当前音乐是否正在播放if (mediaPlayer.isPlaying()) {int currentTime = mediaPlayer.getCurrentPosition();Intent intent = new Intent();intent.setAction("receive music data");intent.putExtra("current", currentTime);sendBroadcast(intent);}try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}// 当音乐播放完毕时,调用该方法@Overridepublic void onCompletion(MediaPlayer mp) {// TODO Auto-generated method stubnextMusic();mediaPlayer.start();}String paths[] = {"/sdcard/abc.mp3", "/sdcard/music_01.MID"};int index = 0;private void nextMusic() {// 从内部资源文件夹载入音乐资源// mediaPlayer = MediaPlayer.create(this, R.raw.music_01);// 从sdcard载入音乐资源mediaPlayer = new MediaPlayer();try {mediaPlayer.setDataSource(paths[index++%paths.length]);mediaPlayer.prepare();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}// //设置循环播放// mediaPlayer.setLooping(true);// 得到音乐的总时长,以毫秒为单位int size = mediaPlayer.getDuration();Intent intent = new Intent();intent.putExtra("size", size);intent.setAction("receive music data");sendBroadcast(intent);// 监听当前音乐是否播放完毕mediaPlayer.setOnCompletionListener(this);}}

0 0
原创粉丝点击