2017-03-15 6 views
1

私はbrodcast受信機を使用してUIを更新する必要があります。私はこのコードを書いたが、私はデバッグ時に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

実際にupdateUIが呼び出されたことを確認しましたか? – hankide

+0

はい私はそれを検証しており、まったく呼び出されていません – dou

答えて

2

問題は、あなたのやり方をActionTimeTickにサブスクライブできないことです。ドキュメントから:

ブロードキャストアクション:現在の時刻が変更されました。 1分ごとに送信されます。 は、で宣言されたコンポーネントを通じてこれを受け取ることはできません。 によってのみContext.registerReceiver()で明示的に登録されます。 Xamarinで

AndroidManifest.xmlファイル内intent-filter要素を生成するときにそれが動作しませんので、IntentFilter属性はmonodroid.exeで使用されています。

あなたが行う必要があるのは、IntentFilter属性を削除して、受信者をプログラムでMainActivityに登録することです。

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

protected override void OnPause() 
{ 
    base.OnPause(); 
    UnregisterReceiver(yourReceiver); 
} 
関連する問題