Broadcast-广播的接收

至于广播的意思,不再赘述,直接看它的使用

先看代码

package com.example.test1123;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;

import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;

import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
    TextView tv;
    Button bt1;
    Button bt2;
    Button bt3;
    int i = 0;
    MyBroadReceive myBroadReceive;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView)findViewById(R.id.tv);
        bt1 = (Button) findViewById(R.id.bt1);
        bt2 = (Button) findViewById(R.id.bt2);
        bt3 = (Button) findViewById(R.id.bt3);
        myBroadReceive = new MyBroadReceive();
        bt1.setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        switch (arg0.getId()) {
        case R.id.bt1:
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
            registerReceiver(myBroadReceive, intentFilter);
            break;
       case R.id.bt2:
            unregisterReceiver(myBroadReceive);
default: break; } } public class MyBroadReceive extends BroadcastReceiver{ @Override public void onReceive(Context arg0, Intent arg1) { tv.setText("click"+i); i++; } }

里面其实就三处关键代码

一个就是定义广播接收者:

         继承自

         MyBroadReceive extends BroadcastReceiver

         接收以后处理,实现

         onReceive

另外一个就是注册广播接收

  这个也是包括两个

    一个就是确定你要接收广播代号(这个其实就是发送者唯一标签,类似波长)

     

      intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

    另外一个就是绑定这个标签跟你定义的接收处理动作

      registerReceiver(myBroadReceive, intentFilter);

最后就是广播注销,也就是不再接收广播

nregisterReceiver(myBroadReceive);

当我完成了以上步骤以后,发现还是没有作用,原来还需要最后一步,就是授权了。就像你不能无缘无故就接受到所有的广播一样。授权就在AndroidManifest.xml中添加如下

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

这样就行了。当手机网络发生变化的时候,我们就可以接收到信息了



原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_broad_15626142.html