首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android当另一个类发生事情时通知一个类(自定义广播接收器)

Android当另一个类发生事情时通知一个类(自定义广播接收器)
EN

Stack Overflow用户
提问于 2021-12-26 21:42:57
回答 1查看 145关注 0票数 0

当发生什么事情时,我需要一个类通知MainActivity。如何才能最好地做到这一点?

我的应用是太空游戏。一类管理碰撞检查,并确定何时发生与燃料电池的碰撞。如何通知MainActivity,以提高UI上的分数?

EN

回答 1

Stack Overflow用户

发布于 2021-12-26 22:39:02

在研究了解决此问题的几种可能的解决方案之后,迄今为止最好的解决方案是设置一个自定义广播接收器。意识到发生了冲突的类发送一个广播。然后由MainActivity来获取它,然后它可以更新UI。自定义广播接收器是灵活和非常有用的-但它们的实现可能很难理解,甚至阅读文档。所以我创建了一个逐步的指南来设置一个Android自定义广播接收器。当您需要在同一应用程序的不同部分之间进行通信时,它工作得最好,尽管它可以适应广播接收器的常规用途,如android.intent.action.INPUT_METHOD_CHANGED或android.intent.action.BOOT_COMPLETED。

轻松2步设置自定义广播接收机指南

步骤1-当需要发送广播时,在类中:

( a)创建新的意图

( b)广播名称的setAction --在接收活动(步骤2)和宣言(步骤3)中,这将是相同的。

( c)并添加任何Extras --您可以在接收到广播时检索它们。

代码语言:javascript
复制
Intent intent = new Intent();
intent.setAction("com.daplipcoding.broadcast.blockWonBroadcast");
intent.putExtra("wonBlock", 0); //0=block won

d)发送广播-注意您将需要applicationContext。您可能需要通过构造函数将applicationContext传递到该类,然后使用此上下文发送广播。

代码语言:javascript
复制
context.sendBroadcast(intent);

步骤2-在需要通知的活动中:

( a)设置私有BroadcastReceiver参数

代码语言:javascript
复制
private BroadcastReceiver broadcastReceiver;

( b)创建新的IntentFilter.

( c)为您感兴趣的广播从addAction到IntentFilter

( d)创建新的BroadcastReceiver --这将覆盖OnReceive方法--这是您将逻辑用于响应广播的地方。

( e)一切重要!寄存器接收机

代码语言:javascript
复制
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.daplipcoding.broadcast.blockWonBroadcast");
    broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            int wonBlock = intent.getIntExtra("wonBlock",255);
            
            //logic to respond to the broadcast 
        }
    };
    registerReceiver(broadcastReceiver, intentFilter);

( f)不要忘记在onPause或类似的生命周期事件中注销接收器

代码语言:javascript
复制
@Override
protected void onPause() {
    super.onPause();
    //stop broadcast
    this.unregisterReceiver(broadcastReceiver);

}

步骤3-在Manifest -中,对于只处理自己的应用程序业务的广播来说,这个步骤是不必要的。

( a)以广播的名称登记将接收广播的活动

代码语言:javascript
复制
<receiver android:name=".MainActivity"
    android:enabled="true"
    android:exported="false">
    <intent-filter>
        <action android:name="com.daplipcoding.broadcast.blockWonBroadcast">
        </action>
    </intent-filter>
</receiver>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70490063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档