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

时间:2017-03-15 08:59:49

标签: android xamarin xamarin.android

我需要使用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));                 
    }
}

1 个答案:

答案 0 :(得分:2)

问题在于您无法按照自己的方式订阅ActionTimeTick。来自文档:

  

广播行动:当前时间已经改变。每分钟发送一次。 您   无法通过清单中声明的组件接收此内容,仅通过   使用Context.registerReceiver()显式注册它。

在Xamarin中,monodroid.exe在AndroidManifest.xml文件中生成intent-filter元素时使用IntentFilter属性,这样就无法工作。

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

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

protected override void OnPause()
{
    base.OnPause();
    UnregisterReceiver(yourReceiver);
}