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();;
}
}
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.staticbroadcastreceiverdemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="15" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.staticbroadcastreceiverdemo.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 注册BroadcastReceiver,并设置过滤器和过滤条件 -->
<receiver
android:name=".PlaneBroadcastReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="com.vrinux.static" />
</intent-filter>
</receiver>
</application>
</manifest>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。