BroadReceiver

无序广播

1.发送端

Intent intent = new Intent();
intent.setAction("com.aa");
intent.putExtra("name","黄彪");
sendBroadcast(intent);

2.在AndroidManifest静态注册

    <receiver android:name=".demo1.Disorder_receiver_1" >
        <intent-filter android:priority="500">      //priority  优先级
            <action android:name="com.aa" />
        </intent-filter>
    </receiver>
    <receiver android:name=".demo1.Disorder_receiver_2">
        <intent-filter android:priority="1000">
            <action android:name="com.aa" />
        </intent-filter>
     </receiver>

3.创建receiver

  • 1.新建BroadcastReceiver的子类
  • 2.重写onReceive方法,可以在此处做接收到广播之后的操作
  • 如果此接收者可以接收很多个广播,那么需要判断正在接收的广播的标志
public class Disorder_receiver_1 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals("com.aa")){
            String name = intent.getStringExtra("name");
            Log.d("aa", "onReceive: disorder_receiver1"+name);
        }
    }
}
public class Disorder_receiver_2 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals("com.aa")){
            String name = intent.getStringExtra("name");
            Log.d("aa", "onReceive: disorder_receiver2"+name);
            abortBroadcast();  //无序广播 拦截无效    优先级还是有效的
        }
    }
}

有序广播

1.发送端

Intent intent = new Intent();
intent.putExtra("name","biao");
intent.setAction("com.bb");
sendOrderedBroadcast(intent,null);

2.静态注册

       <receiver android:name=".demo2.Order_receiver_1" >
            <intent-filter android:priority="500">
                <action android:name="com.bb"/>
            </intent-filter>
        </receiver>
        <receiver android:name=".demo2.Order_receiver_2">
            <intent-filter android:priority="1000">
                <action android:name="com.bb" />
            </intent-filter>
        </receiver>

2.动态注册

       receiver1 = new  Order_receiver_1();
       IntentFilter intentFilter = new IntentFilter();
       intentFilter.addAction("com.cc");
       intentFilter.setPriority(500);
       registerReceiver(receiver1,intentFilter);

       receiver2 = new  Order_receiver_2();
       IntentFilter intentFilter1 = new IntentFilter();
       intentFilter1.addAction("com.cc");
       intentFilter.setPriority(1000);
       registerReceiver(receiver2,intentFilter1);

3.创建receiver

public class Order_receiver_1 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals("com.bb")){
            String name  = intent.getStringExtra("name");
            Log.d(TAG, "onReceive: receiver1"+name);
        }
    }
}
public class Order_receiver_2 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals("com.bb")){
            String name  = intent.getStringExtra("name");
            Log.d(TAG, "onReceive: receiver2 "+name);
        }
        abortBroadcast();  //拦截广播,优先级priority高,先执行,进行拦截
    }
}

4.取消注册

 @Override
    protected void onDestroy() {
        super.onDestroy();
        if (receiver!=null){
            unregisterReceiver(receiver);
        }
    }

系统广播

1.网络状况

public class NetworkStateActivity extends AppCompatActivity {

    TextView tv;
    NetStatusReceiver receiver;

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

        tv=(TextView)findViewById(R.id.net_tv);

        receiver=new NetStatusReceiver();
        IntentFilter filter=new IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(receiver,filter);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (receiver!=null){
            unregisterReceiver(receiver);
        }
    }

    //    创建广播接收者,接收系统级别的广播
    class NetStatusReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            String action=intent.getAction();
            if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)){
//                获取网络连接管理者对象
                ConnectivityManager manager=((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE));
                NetworkInfo info=manager.getActiveNetworkInfo();

                if (info!=null&&info.isAvailable()){
                    String name=info.getTypeName();
                    Toast.makeText(context,"当前网络名称:"+name,Toast.LENGTH_SHORT).show();
                    tv.setText(name);
                }else {
                    Toast.makeText(context,"当前没有可用的网络",Toast.LENGTH_SHORT).show();
                    tv.setText("当前没有可用的网络");
                }

            }
        }
    }

}

2.电量

public class BatteryActivity extends AppCompatActivity {

    TextView batteryTv;
    BatteryReceiver receiver;

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

        batteryTv=(TextView)findViewById(R.id.battery_tv);

        receiver=new BatteryReceiver();
        IntentFilter filter=new IntentFilter();
        filter.addAction(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(receiver,filter);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

    class BatteryReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            String action=intent.getAction();
            if (action.equals(Intent.ACTION_BATTERY_CHANGED)){
//                目前电池的电量
                int level=intent.getIntExtra("level",100);
//                获取电池的总电量
                int total=intent.getIntExtra("scale",100);
//                获取当前电量的百分比
                int current=level*100/total;
                Log.i("hb","电池当前的电量:"+current+"%");
                batteryTv.setText("电池当前电量"+current+"%");
            }
        }
    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容