如何使用广播接收器更新UI



我需要使用Brodcast接收器更新UI。我编写了此代码,但是在调试时我看不到UI的任何更新。

[BroadcastReceiver(Enabled = true)]
[IntentFilter(new[] { Android.Content.Intent.ActionTimeTick })]
private class broadcastReceiver : BroadcastReceiver
{
    private _MyActivityact;
    public void broadCastReceiver(_MyActivity act)
    {
        this.act = act;
    }
    public override void OnReceive(Context context, Intent intent)
    {
        _MyActivity.RunOnUiThread(() => {
                     updateUI(intent);   
        });                     
    }
    private void updateUI(Intent intent)
    {
        float mstartx = _MyActivity.getmStartX();
        TextView startx = _MyActivity.FindViewById<TextView>(Resource.Id.startx);
        startx.SetText(Convert.ToChar(mstartx));                 
    }
}

问题是您不能以操作方式订阅ActionTimetick。从文档中:

广播动作:当前时间已经改变。每分钟发送。您 无法通过清单中声明的组件收到此内容,仅通过 显式将其注册为Context.RegisterReceiver()。

在Xamarin中,在AndroidManifest.xml文件中生成 intent-filter元素时,intentFilter属性使用nodroid.exe使用。

您需要做的是删除IntentFilter属性,然后在MainActivity中以编程方式注册接收器(例如)。

protected override void OnResume()
{
    base.OnResume();
    RegisterReceiver(yourReceiver, new IntentFilter(Intent. ActionTimeTick));
}
protected override void OnPause()
{
    base.OnPause();
    UnregisterReceiver(yourReceiver);
}

最新更新