当发生什么事情时,我需要一个类通知MainActivity。如何才能最好地做到这一点?
我的应用是太空游戏。一类管理碰撞检查,并确定何时发生与燃料电池的碰撞。如何通知MainActivity,以提高UI上的分数?
发布于 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 --您可以在接收到广播时检索它们。
Intent intent = new Intent();
intent.setAction("com.daplipcoding.broadcast.blockWonBroadcast");
intent.putExtra("wonBlock", 0); //0=block wond)发送广播-注意您将需要applicationContext。您可能需要通过构造函数将applicationContext传递到该类,然后使用此上下文发送广播。
context.sendBroadcast(intent);步骤2-在需要通知的活动中:
( a)设置私有BroadcastReceiver参数
private BroadcastReceiver broadcastReceiver;( b)创建新的IntentFilter.
( c)为您感兴趣的广播从addAction到IntentFilter
( d)创建新的BroadcastReceiver --这将覆盖OnReceive方法--这是您将逻辑用于响应广播的地方。
( e)一切重要!寄存器接收机
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或类似的生命周期事件中注销接收器
@Override
protected void onPause() {
super.onPause();
//stop broadcast
this.unregisterReceiver(broadcastReceiver);
}步骤3-在Manifest -中,对于只处理自己的应用程序业务的广播来说,这个步骤是不必要的。
( a)以广播的名称登记将接收广播的活动
<receiver android:name=".MainActivity"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="com.daplipcoding.broadcast.blockWonBroadcast">
</action>
</intent-filter>
</receiver>https://stackoverflow.com/questions/70490063
复制相似问题