Android -- 简单广播接收与发送(2)--动态注册广播接收器

1. 效果图

 

2. 代码

  1. 布局文件

 <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn1" >
    </Button>

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn2" >
    </Button>

    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn3" >
    </Button>
main.xml
public class firstActivity extends Activity {
    public static final String MY_ACTION = "iflab.test.MY_ACTION"; // 自定义ACTION
    myReceiver receiver; // myReceiver对象

    @Override
    public void onCreate(Bundle savedInstanceState) { // 重载onCreate方法
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btn1 = (Button) findViewById(R.id.button1); // 获取ID
        Button btn2 = (Button) findViewById(R.id.button2);
        Button btn3 = (Button) findViewById(R.id.button3);
        btn1.setOnClickListener(new View.OnClickListener() { // 设置监听器

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(); // Intent对象
                intent.setAction(MY_ACTION); // 设置Action
                intent.putExtra("message", "来自于广播的消息!"); // 设置广播的消息
                sendBroadcast(intent); // 发送广播
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() { // 设置监听器

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                IntentFilter filter = new IntentFilter("iflab.test.MY_ACTION");
                receiver = new myReceiver();
                registerReceiver(receiver, filter); // 注册广播接收器
            }
        });
        btn3.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                unregisterReceiver(receiver); // 销毁广播接收器
            }
        });
    }
    
    
    
}
firstActivity
public class myReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context arg0, Intent arg1) {                //重载onReceive方法
        // TODO Auto-generated method stub
        String str;
        str="接收到的广播消息为:"+arg1.getStringExtra("message");    //接收消息
        Toast.makeText(arg0, str,Toast.LENGTH_LONG).show();        //显示
    }
}
myReceiver
  <receiver android:name="myReceiver" >
            <intent-filter>
            </intent-filter>
        </receiver>
配置文件

 

3. 提示

  没有注册广播接收器的时候不要点击销毁广播接收器   会停止运行  也算是一个小小的BUG吧  需要的用户自己进行一些操作

posted @ 2014-12-14 13:10  落寞回头不如华丽转身  阅读(248)  评论(0编辑  收藏  举报