2014-11-20 2 views
1

내 응용 프로그램에서 IntentService 클래스로부터 내 Activity를 통보해야합니다. 그 목적을 위해 LocalBroadcastManager를 사용하고 있습니다. 하지만 내 방송 수신기의 onReceive에서 아무것도받지 못합니다. 여기 제가 작성한 내용이 있습니다.LocalBroadcastManager가 예상대로 작동하지 않습니다.

내 BaseActivity에서 수신자를 등록했습니다.

public class BaseActivity extends FragmentActivity implements App { 

@Override 
protected void onCreate(Bundle arg0) { 
    super.onCreate(arg0); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    LocalBroadcastManager.getInstance(this).registerReceiver(
      mMessageReceiver, new IntentFilter(custom-event-name)); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(
      mMessageReceiver); 
} 

// Our handler for received Intents. This will be called whenever an Intent 
// with an action named "custom-event-name" is broadcasted. 
BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 
     System.out.println("Overlay Message" +bundle.getString("message")); 
      } 
     }; 
    } 

내 RegisterAlarmIntentService 클래스에서 로컬 방송을 보내고 있습니다.

public class RegisterAlramIntentService extends WakefulIntentService implements 
      APIConstants { 

    public RegisterAlramIntentService() { 
     super("AlarmService"); 
    } 

    @Override 
    public String getTag() { 
     return "AlarmService"; 
    } 

@Override 
protected void onHandleIntent(Intent intent) { 
      System.out.println("Working till here fine In RegisterAlarm"); 
      Bundle bundle = intent.getExtras(); 
      Intent localIntent = new Intent(custom-event-name); 
      localIntent.putExtras(bundle); 
      LocalBroadcastManager.getInstance(this).sendBroadcast(
         localIntent); 


     } 
    } 

onHandleIntent() 메서드가 호출됩니다. 그러나 수신자의 onReceive()에는 아무 것도 수신되지 않습니다. 도와주세요. 미리 감사드립니다 !!

+0

내가 이벤트 이름은 단순히 문자열이 될 수 있는지 잘 모르겠습니다 참조하십시오. – user2781627

+0

네, 그게 정확히 제가 한 일입니다 ... custom-event-name은 실제로 제가 사용한 정적 상수입니다. – user2781627

+0

예 내 응용 프로그램의 다른 모든 활동을 확장하는 데 사용한 기본 활동이며 응용 프로그램이 포 그라운드에 있고 사용자가이 응용 프로그램과 상호 작용할 수있을 때이 작업을 수행합니다. – user2781627

답변

2

매니페스트에 또한

public class RegisterAlramIntentService extends WakefulIntentService implements 
      APIConstants { 

    Intent localIntent; 

    public RegisterAlramIntentService() { 
     super("AlarmService"); 

     localIntent = new Intent(custom-event-name); 
    } 

    @Override 
    public String getTag() { 
     return "AlarmService"; 
    } 

@Override 
protected void onHandleIntent(Intent intent) { 
      System.out.println("Working till here fine In RegisterAlarm"); 
      Bundle bundle = intent.getExtras(); 
      Thread.sleep(5000); // For Testing only because it is in whole new thread (which may not wait for your reciever to setup) 
      localIntent.putExtras(bundle); 
      LocalBroadcastManager.getInstance(this).sendBroadcast(
         localIntent); 


     } 
    } 

을 시도해보십시오

<service android:name="com.commonsware.android.localcast.RegisterAlramIntentService"/> 

this

+0

좋아, 이것은 좋은 대답이다, 나는 왜 나를 위해 일하는지 이해할 수 없다. 나는 그것을 작동 시키려고 거의 3 시간을 보냈다. 내 서비스가 실행 중이지만 내 방송은 수신되지 않습니다. 내가 한 일은 exatcly this : onHandleIntent 내 Intent를 인스턴스화하는 대신 위의 예와 같이 내 서비스 생성자 내부에서 인스턴스화했습니다. 그리고 이제는 효과가 있습니다. – Fuhrmann

관련 문제