2014-09-29 2 views
0

Я использую следующие вещать намерение от OnCreate моего MainActivity в:Broadcast не получил от моего класса

Intent i = new Intent(this, MyNewReceiver.class); 
sendBroadcast(i); 

Вот мой класс приемника:

public class MyNewReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("OK", "RECEIVED"); 
    } 

} 

Я не становлюсь ошибки, но я тоже не получаю свой Log.

Я знаю, что это не совсем то, что нужно для BroadcastReceiver, но в этом случае мне нужно вызвать его вручную один раз.

ответ

0

Явные намерения (намерение, в котором вы указываете целевой класс) не предназначены для запуска BroadcastReceivers, вместо этого они получают намерения посредством намерений implcit с использованием IntentFilters. Причина этого заключается в том, что цель всего механизма вещания - отправлять события, не зная, кто их будет слушать.

http://developer.android.com/guide/components/intents-filters.html#Receiving

Путь для достижения этой цели является:

Сначала объявить BroadcastReceiver в манифесте наряду с действиями он suppossed слушать. Вот вам пример того, как сделать это:

<receiver android:name="your.package.MyNewReceiver" > 
    <intent-filter> 
     <action android:name="your.action.string" /> 
    </intent-filter> 
</receiver> 

Строка действия может быть любая строка, которую вы хотите, но это, как правило, хорошая идея, чтобы выбрать что-то в стиле пакета Java с пакетом вашего собственного приложения ,

Наконец отправить намерение, указав струнное действие таким образом:

Intent intent = new Intent("your.action.string"); 
sendBroadcast(intent); 

Надеется, что это помогает.