栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Android】BoardcastReceiver简介

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Android】BoardcastReceiver简介

一. 广播接收器的两种注册方法 1. 静态注册

在 AndroidManifest.xml 中注册,这种注册方法只要 APP 安装了,广播接收器就会一直存在。


    
        
    

在代码中如何接收和发送广播

// 广播接收器
public class MyReceiver extends BroadcastReceiver {
    // 接收广播
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"消息来啦!",Toast.LENGTH_SHORT).show();
    }
}

// Activity 发送广播
public class MainActivity extends AppCompatActivity {

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

    // 静态注册,发送广播
    public void send(View view) {
       // Intent intent = new Intent(this, MyReceiver.class);
        Intent intent = new Intent("com.geek99.MY_BR");
        sendBroadcast(intent);
    }
}
2. 动态注册

动态注册不用在 AndroidManifest.xml 中注册广播接收器,而是在代码里面当创建 Activity 创建和注册广播接收器。

// 广播接收器类
public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"消息来啦!",Toast.LENGTH_SHORT).show();
    }
}

// Activity 动态注册广播接收器,发送广播
public class MainActivity extends AppCompatActivity {

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

    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.geek99.MY_BR");
        // 注册广播接收器
        registerReceiver(mMyReceiver,filter);
    }

    // 一个 Button 的回调函数,发送广播
    public void send2(View view) {
        Intent intent = new Intent("com.geek99.MY_BR");
        sendBroadcast(intent);
    }

    @Override
    protected void onStop() {
        super.onStop();
        // Activity 停止时,注销广播接收器
        unregisterReceiver(mMyReceiver);
    }
}
二. 有序广播

在 AndroidManifest.xml 中注册广播接收器时,可以在 android:priority 声明优化级,数字值越大,优化级越高。如下例子,两个广播接收器的 action 是相同的,action 相同的广播,可以用同个 intent 同时 send 出去,但优化级高的会先在 reciever 收到。


    
        
    



    
        
    

// receiver1
public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "我第一个收到消息!", Toast.LENGTH_SHORT).show();
    }
}

// receiver2
public class MyReceiver2 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "我第二个收到消息!", Toast.LENGTH_SHORT).show();
        this.abortBroadcast();
    }
}

// 如上两个 Receiver,在 AndroidManifest.xml 中注册优化级高的,会先收到广播,Toast 会先打印
三. 系统广播

在 Android 系统某些事件发生时,会收到一些广播。

https://developer.android.com/reference/android/content/Intenthttps://developer.android.com/reference/android/content/Intent

 在 AndroidManifest.xml 中注册广播接收器,接收 action 为 "android.intent.action.TIME_SET" 的系统广播。


    
        
    
// 广播接收器
public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "时间更改了!", Toast.LENGTH_SHORT).show();
    }
}

public class MainActivity extends AppCompatActivity {

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

    @Override
    protected void onResume() {
        super.onResume();
        // 过滤 Intent,接收广播
        IntentFilter f = new IntentFilter();
        f.addAction(Intent.ACTION_TIME_CHANGED);
        registerReceiver(r,f);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666761.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号