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