Android BroadcastReceiver不总是使用AlarmManager启动

Android BroadcastReceiver不总是使用AlarmManager启动,android,broadcastreceiver,alarmmanager,Android,Broadcastreceiver,Alarmmanager,我们花了几天时间在这里寻找答案,但什么也没有找到 public class myReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { } } 活动: public class TestActivity extends Activity { private myReceiver rec; @Override pr

我们花了几天时间在这里寻找答案,但什么也没有找到

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


...
它并不总是有效,但在“它想要”的时候:(

注意!我开始在Eclipse中按Ctrl+F11,然后用后退按钮关闭应用程序,然后再按Ctrl-F11!因此,在第7次迭代中,应用程序工作了(在onReceive中toast)。我停止了它,删除了数据,然后再次开始按Ctrl-F11,在第3次迭代中-工作了,第5次迭代也工作了…这是什么?

您可以尝试的一些更改(并非所有都是必需的)

  • 将myReceiver更改为myReceiver(:-)这是Java命名约定)

  • 除去

    rec=newmyreceiver();

  • 给出一些未来时间,而不是以毫秒为单位的当前时间

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

  • 在onReceive()中放置调试消息

    Log.d(“MyReceiver”、“onReceive”);


  • 它并不总是起作用,而是在“它想要”的时候起作用:(
    !不易理解,请提供准确信息。我在onReceive中添加了toast,并在我的设备上更新了应用程序,它开始工作。好的。然后我从手机中删除我的应用程序并重新安装,没有任何代码更改,但没有任何效果…我很困惑。我正在使用AVD我的真实设备。更新什么?新安装不起作用,是吗?之后将Toast添加到onReceive时,我按Ctrl+F11键,我的应用程序的更新副本已登录到手机。新安装不起作用。请执行此操作或保留调试点和跟踪。
    <application ...>
    ...
    <receiver android:name="com.myprj.myReceiver" android:enabled="true"></receiver>
    </application>