2017-02-16 7 views
0

これは動作しません。受信者にメッセージは届きません。私は何時間も働いています。私がやろうとしているのは、別のAppContextクラスを使ってActivityを使わずにLocalBroadcastManagerを使うことです。別のクラスを使用しているアクティビティのないLocalBroadcastManagerを使用する

クラス1

import android.content.Context; 

public class AppContext extends Application { 

    private static AppContext instance; 

    public AppContext() { 
     instance = this; 
    } 

    public static Context getContext() { 
     return instance; 
    } 

} 

クラス2

@Override 
public void onResume() { 

    receiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      //receive your message here 

      String message = intent.getStringExtra("message"); 
      Log.d("receiver", "Got message: " + message); 

      Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); 

     } 

    }; 

    LocalBroadcastManager.getInstance(AppContext.getContext()).registerReceiver(receiver, 
      new IntentFilter("custom-event-name")); 

Class3の

   Log.d("sender", "Broadcasting message"); 
       Intent intent = new Intent("custom-event-name"); 
       // You can also include some extra data. 
       intent.putExtra("message", "99999"); 
       LocalBroadcastManager.getInstance(AppContext.getContext()).sendBroadcast(intent); 

答えて

1

私も同じ問題がありました。 class3の内容を変更しないでください。私はその完璧だと思います。 class2では、BroadcastReceiverを拡張する内部クラスを作成します。

private class Class2Receiver extends BroadcastReceiver 
{ 
     @Override 
     public void onReceive(Context context, Intent intent) 
{ 
      Class2.this.class2Refresh(); 
     } 
    } 

// class2Refresh():クラス2でthismethod

にここにあなたのメッセージを受け取り、onResume()メソッドは、以下のようにインスタンス化します。これはアウト場合に役立ちます

Class2 class2Rec=new Class2.Class2Receiver(); 
     LocalBroadcastManager.getInstance(getContext()).registerReceiver(class2Rec,new IntentFilter("custom-event-name")); 
     class2Refresh(); 

が私を知ってみましょう!

関連する問題