2013-04-01 4 views
0

Несколько дней были потрачены, чтобы найти ответ здесь, но ничего.BroadcastReceiver не всегда срабатывает с AlarmManager

public class myReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    } 
} 

активность:

public class TestActivity extends Activity { 
private myReceiver rec; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
     ... 
     rec = new myReceiver(); // do I really need this? 
     AlarmManager am=(AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(this, myReceiver.class); 
     PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 5 , pi); 
    } 
} 

XML

<application ...> 
... 
<receiver android:name="com.myprj.myReceiver" android:enabled="true"></receiver> 
</application> 

Он работает не всегда, но когда "он хочет" :(

ВНИМАНИЕ !: Я начал нажимать Ctrl + F11 в Eclipse и закрыть приложение с помощью кнопки «Назад» и снова Ctrl-F11! SO, на 7-й итерации приложение работает (тост в onReceive). Я остановил его, удалю d ata и начать снова нажимать Ctrl-F11, на 3-й итератор - работать, и 5-я итерация также работает ... Что это?

+0

'Это работает не всегда, но когда "он хочет"(' Это не усваиваются, пожалуйста, предоставить точную информацию! , – RobinHood

+0

Я добавил toast to onReceive, обновил приложение на своем устройстве и начал работать. ОК. Затем я удаляю свое приложение с телефона и снова устанавливаю его без каких-либо изменений кода, и ничего не работает ... Я смутился. Я использую в AVD свое настоящее устройство. – user2230842

+0

Что обновить? и новая установка не работает, не так ли? – RobinHood

ответ

0

Несколько изменений вы можете попробовать (не все они необходимы)

  1. Изменить myReceiver в MyReceiver (:-) сво Java именования)

  2. Удалить

    rec = new myReceiver();

  3. Дайте некоторое время вместо текущего времени в миллисе

    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000 * 5, 1000 * 5 , pi);

  4. Поместить сообщение отладки в OnReceive()

    Log.d("MyReceiver", "onReceive");

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