2

私は自分のアプリ内でローカルメッセージを送信する方法を探していて、XamarinのウェブサイトBroadcast Receivers hereから、LocalBroadcastManagerに関するWebページの一番下にあるチュートリアルを見つけました。私はチュートリアルに従い、ページを数回読んだが、私のBroadcastReceiverクラスはまだメッセージを送信しても何も受信していない。私はLocalBroadcastManagerに関する多くの質問をjavaに打ちましたが、C#には何が欠けているのか分からないようです。 OnPause()内Xamarin Android LocalBroadcastManagerの使い方

_dirtyMessageReceiver = new DirtyBroadcastReceiver(); 
RegisterReceiver(_dirtyMessageReceiver, new IntentFilter("dirty")); 

登録解除受信機::私は私のOnResume()内の受信機を登録するよどこ

ここ
Intent intent = new Intent("dirty"); 
intent.PutExtra("dirtyAppCount", dirtyAppCount); 
LocalBroadcastManager.GetInstance(Context).SendBroadcast(intent); 

だ:

この

は、送信されたメッセージをトリガのコードです
UnregisterReceiver(_dirtyMessageReceiver); 

ここにレシーバクラスがあります。

[BroadcastReceiver(Enabled = true, Exported = false)] 
public class DirtyBroadcastReceiver : BroadcastReceiver 
{ 
    public override void OnReceive(Context context, Intent intent) 
    { 
     int dirtyAppCount = intent.GetIntExtra("dirtyAppCount", 0); 
     OnMessageReceived?.Invoke(this, new MessageArgs(dirtyAppCount)); 
    } 
} 

答えて

1

このコードには2つの問題があります。まず、あなたはLocalBroadcastManagerとレシーバを登録する使用する必要があります。

_dirtyMessageReceiver = new DirtyBroadcastReceiver(); 
RegisterReceiver(_dirtyMessageReceiver, new IntentFilter("dirty")); 

_dirtyMessageReceiver = new DirtyBroadcastReceiver(); 
LocalBroadcastManager.GetInstance(this).RegisterReceiver(_dirtyMessageReceiver, new IntentFilter("dirty")); 

であるべき第二に、レシーバーの登録解除は、同様にLocalBroadcastManagerに対するものでなければならない:

UnregisterReceiver(_dirtyMessageReceiver); 

LocalBroadcastManager.GetInstance(this).UnregisterReceiver(_dirtyMessageReceiver); 
+0

私はそれが何か簡単だと分かっていました。/私は、放送受信機の登録/登録解除がすべてを捕まえると仮定しました。ないと思います。ありがとう! –

0

これらのためにブロードキャストレシーバーを追加する必要があります。例えば、Android.Content.IntentをActionTimeTickに設定すると、時間が変更されるたびにアンドロイドはメッセージ(アンドロイドインテント)をブロードキャストします。

[BroadcastReceiver(Enabled = true)] 
    [IntentFilter(new[] { Android.Content.Intent.ActionTimeTick })] 
    public class GridStartBroadcastReceiver : BroadcastReceiver 
    { 
     public static readonly string GRID_STARTED = "GRID_STARTED"; 
     public override void OnReceive(Context context, Intent intent) 
     { 
      if (intent.Action == GRID_STARTED) 
      { 
     //your logic 
      } 
     } 
    } 

ブロードキャスト受信機を最初に登録する必要があります。これらのコードをoncreateメソッドに追加して、ブロードキャスト受信機を登録します。

IntentFilter filter = new IntentFilter(GridStartBroadcastReceiver.GRID_STARTED); 
      filter.AddCategory(Intent.CategoryDefault); 
      _receiver = new GridStartBroadcastReceiver(); 
      RegisterReceiver(_receiver, filter); 

次にブロードキャストをブロードキャストレシーバーに送信します。