Android:静态注册BroadcastReceiver
投稿于 被查看 23656 次 评论:220
Android:静态注册BroadcastReceiver
由于动态注册BroadcastReceiver只能在Activity的onCreate()方法调用时才能注册再接收广播,所以当程序没有运行就不能接受到广播;但是静态注册的则不依赖于程序是否处于运行状态。
当然动态注册的好处是,自由灵活。
下面来看一下静态注册的代码吧:
MainActivity.java:
package com.example.staticbroadcastreceiverdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
public class MainActivity extends Activity {
private Handler myHandler;
//定义一个Intent,用于发送广播;
private Intent myIntent;
//子线程标志位;
private boolean tag = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
//实例化Intent
myIntent = new Intent();
//设置过滤条件;
myIntent.setAction(com.vrinux.static);
//此处我使用一个Handler,接收子线程每隔3秒发来一次消息,
//就发送一个广播,并将值发出去;
myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
int count = msg.arg1;
myIntent.putExtra(text, 来自activity的广播~ + count);
//发送广播;
sendBroadcast(myIntent);
}
};
new Thread(new Runnable() {
int count = 0;
@Override
public void run() {
// TODO Auto-generated method stub
//将标志位值设为true;
tag = true;
while (tag) {
Message msg = Message.obtain();
msg.arg1 = count;
myHandler.sendMessage(msg);
SystemClock.sleep(3000);
count += 1;
}
}
}).start();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//当Activity销毁时,将标志位设置为false;
//如果不设置为false,则会看到程序退出后手机屏幕上仍然有Toast显示信息;
//从这点可以看出:1.线程启动后不会随着Activity销毁而销毁;
// 2.静态注册的广播比依赖于程序是否处于运行状态;
if(tag){
tag = false;
}
}
}
PlaneBroadcastReceiver.java:
package com.example.staticbroadcastreceiverdemo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
//继承BroadcastReceiver类;
public class PlaneBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.i(MainActivity,PlaneBroadcastReceiver);
//获取intent传来的值;
String text = intent.getStringExtra(text);
//通过Toast显示在屏幕上;
Toast.makeText(context, text, Toast.LENGTH_LONG).show();;
}
}
用户评论