由于动态注册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>                <receiver            android:name=".PlaneBroadcastReceiver"            android:enabled="true" >            <intent-filter>                <action android:name="com.vrinux.static" />            intent-filter>        receiver>    application>manifest>

更多相关文章

  1. Android四大组件总结——BoardcastReceiver
  2. Android(判断wifi是否开启,手机屏幕状态,sdcard是否被拔出,设置全屏)
  3. android有了eventbus,一切与关界面通信问题迎刃而解。
  4. Android(安卓)Framework架构浅析之【近期任务】
  5. AndroidJNI实践(1)-使用.h头文件-静态注册JNI方法
  6. 关于android来去电监控的一点总结
  7. 【Android(安卓)Developers Training】 18. 重新创建一个Activit
  8. android 创建系统级的Dialog时,无法使用Home关闭的问题
  9. android ContentObserver,BroadcastReceiver,Handler各自用法

随机推荐

  1. Android常用适配器分析(如何制作简易Laun
  2. xamarin之 安装工具介绍
  3. [Android]修改Android Studio项目的运行
  4. 分析ARM ANDROID市场及技术结合点
  5. [Google Android] 理解NDK(1)-- 编译Androi
  6. 【转】推荐--《Android深入浅出》----不
  7. )Android核心模块及相关技术
  8. Android媒体应用(六)--响应媒体按钮
  9. Android 官方示例:android-architecture
  10. Android事件拦截机制