2012-03-23 2 views
0

У меня есть служба, которая должна взаимодействовать с Activity (MyActivity) через BradcastReceiver. Это BroadcastReceiver это объявить intosame деятельность таким образом:Android: Активность и служебная связь

private class MessaggiReceiver extends BroadcastReceiver { 
     public static final String ACTION_RELOAD = "it.android.dev.thecode.ACTION_RELOAD"; 
     @Override 
     public void onReceive(Context arg0, Intent intent) { 
      if(intent.getAction().equals(ACTION_RELOAD)){ 
       leggi_act; //Method of MyActivity 
      } 
     } 

    } 

но как должны объявить в манифесте в brodcast содержащуюся в MyActivity? Я использовал этот код с it.android.dev.thecode.MyActivity.MessaggiReceiver

<receiver android:name="it.android.dev.thecode.MyActivity.MessaggiReceiver"> 
      <intent-filter> 
       <action android:name="it.android.dev.thecode.ACTION_RELOAD"></action> 
      </intent-filter> 
</receiver> 

, но не так, то я использовал этот код с it.android.dev.thecode.myactivity $ MessaggiReceiver

<receiver android:name="it.android.dev.thecode.MyActivity$MessaggiReceiver"> 
       <intent-filter> 
        <action android:name="it.android.dev.thecode.ACTION_RELOAD"></action> 
       </intent-filter> 
    </receiver> 

Спасибо

+0

Если вы объявите его в манифесте, то класс, который его реализует, должен быть видимым, а не 'private'. Поместите его в отдельный файл и сделайте класс 'public'. – zapl

ответ

1

Вам не нужно регистрировать широковещательный приемник в манифесте, а не регистрировать его по коду в onResume вашей деятельности. Не забудьте отменить регистрацию в onPause, чтобы избежать утечек.

@Override 
public void onResume() { 
    registerReceiver(mMessageReceiver, 
     new IntentFilter("it.android.dev.thecode.ACTION_RELOAD")); 
} 

@Override 
public void onPause() { 
    unregisterReceiver(mMessageReceiver); 
} 

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.d("receiver", "Got broadcast: " + intent.getAction()); 
    } 
}; 
+0

Моя трансляция всегда должна работать, чем я не вставляю код unregisterReceiver в onPause? – MimmoG

+0

Когда вы не видите свою активность, то, конечно, она не должна слушать какие-либо трансляции тоже, вот как она должна работать. Если вы не отмените регистрацию своей широковещательной рассылки в onPause, структура будет вызывать предупреждения в logcat и принудительно прекратит прослушивание. Так что лучше быть хорошим заранее с жизненным циклом деятельности, отменив регистрацию в onPause – waqaslam

+0

Хорошо спасибо вам :) – MimmoG

Смежные вопросы