Android广播两种注册方式

在Android中,一个应用可以对来自系统或者其它应用的广播进行注册,从而获取到自己希望获取到的广播信息,以此完成应用的某些业务逻辑。本文主要介绍Android中两种广播的注册方式。

静态注册

静态注册需要在AndroidManifest.xml中注册相关信息,包括自己需要接收的广播协议。

  <receiver android:name=".StaticBroadCast">
            <intent-filter>
                <action android:name="android.intent.action.IS_TIME_TO_SLEEP"/>
            </intent-filter>
        </receiver>

其次创建相关类对接收到广播后的业务逻辑操作进行编写。

/**
 * 静态注册装波接收器
 */
class StaticBroadCast: BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        //接收到相应广播时做相关业务操作
        TODO("Not yet implemented")
    }
}

动态注册

动态注册需要在需要的关键类中进行手动注册,才可以接受广播,具体方法如下

/**
 * 动态注册
 */
class BroadCastTestActivity:Activity() {

    private val DYNAMIC_BROADCAST = "com.lalla.test"

    private val broad = MyBroad()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btn_sendbroad.setOnClickListener(View.OnClickListener {
            val intent =Intent(DYNAMIC_BROADCAST)
            intent.putExtra("content","动态广播")
            sendBroadcast(intent)
        })
    }


    override fun onStart() {
        super.onStart()
        val filter = IntentFilter()
        filter.addAction(DYNAMIC_BROADCAST);
        registerReceiver(broad,filter)
    }

    override fun onStop() {
        super.onStop()
        unregisterReceiver(broad)
    }

    /**
     * 重写继承Broadcast Receiver
     */
    inner class MyBroad:BroadcastReceiver(){
        override fun onReceive(context: Context?, intent: Intent?) {
            val broadCastData:String? = intent?.getStringExtra("content")
            show_data.setText(broadCastData)
        }
    }
}

显而易见,在onStart()中完成了广播注册,并在onStop()中取消注册,同样通过广播接收器对接收到广播后进行相关业务逻辑的处理。

二者区别

静态广播即使在应用销毁后仍然能接收到广播,从而调起应用进行相关业务逻辑;而动态广播因为随着在应用某个活动的销毁而销毁,所以在应用销毁的情况下不再接受广播。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。