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