码迷,mamicode.com
首页 > 移动开发 > 详细

Android:静态注册BroadcastReceiver

时间:2015-04-07 10:08:10      阅读:197      评论:0      收藏:0      [点我收藏+]

标签: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>

Android:静态注册BroadcastReceiver

标签:android   广播   broadcastreceiver   动态注册   

原文地址:http://blog.csdn.net/vrinux/article/details/44903957

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!