BroadcastReceiver 动态注册

预备知识见《 BroadcastReceiver 静态注册》
下面分享一个BroadcastReceiver动态注册的例子:

activity_main.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.victor.a1000phone.day22_demo3_broadcastreceiverdynamic.MainActivity">

<Button
    android:id="@+id/btn_dynamic_assign"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onClick"
    android:text="动态注册广播"
     />
<Button
    android:id="@+id/btn_sendbroadcast"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onClick"
    android:text="发送一条广播"
    android:layout_below="@+id/btn_dynamic_assign"
    />
<Button
    android:id="@+id/btn_unregister"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onClick"
    android:text="注销一条广播"
    android:layout_below="@+id/btn_sendbroadcast"
    />
</RelativeLayout>

MainActivity.class

import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
/**
* Created by Victor on 2016/9/21 0021.
*/
public class MainActivity extends AppCompatActivity {
private MyBroadcastReceiverDynamic myBroadcastReceiverDynamic;
private boolean isRegister=false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void onClick(View view) {
    switch (view.getId()) {
        //注册广播接收器
        case R.id.btn_dynamic_assign:
            //创建广播接收者实体类
            myBroadcastReceiverDynamic=new MyBroadcastReceiverDynamic();
            if (!isRegister){
                IntentFilter intentFilter=new IntentFilter();
                //添加需要过滤的广播的信息
                intentFilter.addAction("com.you.me");
                //注册广播
                registerReceiver(myBroadcastReceiverDynamic,intentFilter);
                isRegister=true;
            }
            break;

        //发送一条广播
        case R.id.btn_sendbroadcast:
            Intent intent=new Intent();
            intent.setAction("com.you.me");
            intent.putExtra("msg","这是一条自定义的广播。。。");
            sendBroadcast(intent);
            break;
        //注销一条广播
        case R.id.btn_unregister:
            if (isRegister){
                //注销一条广播
                unregisterReceiver(myBroadcastReceiverDynamic);
                isRegister=false;
            }else {
                Toast.makeText(this,"您没有广播需要注销",Toast.LENGTH_LONG).show();
            }
            break;
    }
}
//广播是全局变量,十分依赖系统的性能,广播用完后应该注销
//最好是哪个界面开启的,就在那个界面注销
@Override
protected void onDestroy() {
    super.onDestroy();
    onClick(findViewById(R.id.btn_unregister));

}

}

MyBroadcastReceiverDynamic.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
* Created by Victor on 2016/9/21 0021.
*/
public class MyBroadcastReceiverDynamic extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,intent.getStringExtra(“msg”),Toast.LENGTH_LONG).show();
}
}

运行结果:

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值