欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

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();;
    }

}

 



    

    
        
            
                

                
            
        

        
        
            
                
            
        
    

用户评论