Android 广播的简单使用

android9.0 android studio3.4.2 2019/7/29

一,接收系统广播
1,动态注册监听网络变化
创建一个MyReceiver 继承自BroadcastReceiver,并重写onReceive()方法

class MyReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "MyReceiver get it", Toast.LENGTH_SHORT).show();
        }
    }

在Activity中创建IntentFilter,实例化MyReceiver,并进行动态注册,在onDestory()方法中取消注册

public class MainActivity extends AppCompatActivity {
    private IntentFilter intentFilter;
    private MyReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
        myReceiver = new MyReceiver();
        registerReceiver(myReceiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceiver);
    }
    class MyReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "MyReceiver get it", Toast.LENGTH_SHORT).show();
        }
    }

当网络状态发生变化时,MyReceiver会接收到系统发送的广播,并给出提示

2,静态注册,发送自定义标准广播并接收

新建MyReceiver类继承自BroadcastReceiver,重写onReceive()方法

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        Toast.makeText(context, "MyReceiver get it", Toast.LENGTH_SHORT).show();
    }
}

在AndroidManifest中添加要响应的action

 <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.example.broadcasttest.MyReceiver_ACTION" />
            </intent-filter>

        </receiver>

在activity中设置intent并发送

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent=new Intent("com.example.broadcasttest.MyReceiver_ACTION");
        intent.setComponent(new ComponentName("com.example.broadcasttest","com.example.broadcasttest.MyReceiver"));
        //第一个参数为广播接收器所在的包名,第二个参数为广播接收器所在的类名
        sendBroadcast(intent);
    }
    
}

发送有序广播

sendOrderedBroadcast(intent,null);

设置优先级

<intent-filter android:priority="100">
                <action android:name="com.example.broadcasttest.MyReceiver_ACTION" />
            </intent-filter>

拦截有序广播 (Receiver类的onReceive()方法中)

 abortBroadcast();

3,发送本地广播

package com.example.broadcasttest;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {
    private LocalBroadcastManager localBroadcastManager;//本地广播管理器
    private LocalBroadcastReceiver localBroadcastReceiver;//自定义广播接收器
    private IntentFilter intentFilter;//带过滤器的intent
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        localBroadcastManager = LocalBroadcastManager.getInstance(this);//获取本地广播管理器实例
        intentFilter = new IntentFilter("com.example.broadcasttest.LocalBroadcastReceiver_ACTION");
        //设置带action的intent
        localBroadcastReceiver = new LocalBroadcastReceiver();//实例化本地广播接收器
        localBroadcastManager.registerReceiver(localBroadcastReceiver,intentFilter);
        //使用本地广播管理器动态注册自定义广播接收器为本地广播接收器
        localBroadcastManager.sendBroadcast(new Intent("com.example.broadcasttest.LocalBroadcastReceiver_ACTION"));
        //使用本地广播管理器发送本地广播
    }

    class LocalBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "LocalBroadcastReceiver Received", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        localBroadcastManager.unregisterReceiver(localBroadcastReceiver);
        //取消注册自定义广播接收器
    }
}

发布了39 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_29478763/article/details/97648719
今日推荐