关于将UI从BroadcastReceiver更新为特定活动的Android最佳实践

mon*_*nja 24 android broadcastreceiver android-activity

当我有一个broadcastReceiver说android.intent.action.MEDIA_BUTTON并且我想在不创建新活动的情况下更新当前活动的UI时,这个有什么好的做法吗?

我所知道的(可能不正确)

1)我可以将BroadcastReceiver放在与活动相同的类中,并在某些活动后调用updateUI函数

2)创建一个ContentObserver?

3)与活动创建的服务进行通信,使用aidl.(如果从活动中注册,我不知道如何获得当前服务)

4)在与活动相同的类上的broadcastReceiver上创建自定义过滤器,并使用context.sendBroadcast(自定义过滤器的消息)和自定义过滤器调用updateUI(与一个但更通用的相同?)

最后一个流程是来自BroadcastReceiver并最终更新UI而不更新活动(除非活动已经死了?)

请提供有关如何解决此类问题的链接/源代码.非常感谢提前:)

jwr*_*lub 36

提供此功能的最简单方法是将广播接收器放入Activity中,并使用registerReceiverunregisterreceiver绑定/取消绑定它:

public class MyActivity extends Activity {
    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            MyActivity.this.receivedBroadcast(intent);
        }
    };
    @Override
    public void onResume() {
        super.onResume();
        IntentFilter iff = new IntentFilter();
        iff.addAction("android.intent.action.MEDIA_BUTTON");
        // Put whatever message you want to receive as the action
        this.registerReceiver(this.mBroadcastReceiver,iff);
    }
    @Override
    public void onPause() {
        super.onPause();
        this.unregisterReceiver(this.mBroadcastReceiver);
    }
    private void receivedBroadcast(Intent i) {
        // Put your receive handling code here
    }
}
Run Code Online (Sandbox Code Playgroud)

根据您希望收到的意图,您可能需要为AndroidManifest.xml文件添加适当的权限.