Android 如何自动启动AlarmManager以启动计划的活动?

Android 如何自动启动AlarmManager以启动计划的活动?,android,broadcastreceiver,alarmmanager,alarm,autostart,Android,Broadcastreceiver,Alarmmanager,Alarm,Autostart,本教程来自:, 主活动(AndroidScheduledActivity.java)启动AlarmManager以重复触发BroadcastReceiver(MyScheduledReceiver.java)。在MyScheduledReceiver的onReceive()方法中,它间接启动另一个活动(MyScheduledActivity.java)。这样活动(MyScheduledActivity.java)将在预定的时间间隔内启动。 现在我将使用AutoStart自动启动,但我无法编写Au

本教程来自:, 主活动(AndroidScheduledActivity.java)启动AlarmManager以重复触发BroadcastReceiver(MyScheduledReceiver.java)。在MyScheduledReceiver的onReceive()方法中,它间接启动另一个活动(MyScheduledActivity.java)。这样活动(MyScheduledActivity.java)将在预定的时间间隔内启动。 现在我将使用AutoStart自动启动,但我无法编写AutoStart NotifyReceiver。 请你给我一个如何管理它的主意好吗? 非常感谢

主要活动AndroidScheduledActivity.java:

public class AndroidScheduledActivity extends Activity {

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      Button buttonStart = (Button)findViewById(R.id.start);
      buttonStart.setOnClickListener(new Button.OnClickListener(){

  @Override
  public void onClick(View arg0) {
    Intent myIntent = new Intent(getBaseContext(),
      MyScheduledReceiver.class);

    PendingIntent pendingIntent
     = PendingIntent.getBroadcast(getBaseContext(),
       0, myIntent, 0);

    AlarmManager alarmManager
      = (AlarmManager)getSystemService(ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 10);
    long interval = 60 * 1000; //
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
      calendar.getTimeInMillis(), interval, pendingIntent);
    finish();
  }});
  }

}
然后是BroadcastReceiver,MyScheduledReceiver.java

public class MyScheduledReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {

 Intent scheduledIntent = new Intent(context, MyScheduledActivity.class);
 scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 context.startActivity(scheduledIntent);
}
}
我的问题是自动启动接收器:

public class AutoStartNotifyReceiver extends BroadcastReceiver {

 private final String BOOT_COMPLETED_ACTION = "android.intent.action.BOOT_COMPLETED";

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

  if(intent.getAction().equals(BOOT_COMPLETED_ACTION)){

????????????????????

  }

 }
}

您的
AutoStart NotifyReceiver extends BroadcastReceiver
类在那里,因为当设备重置时,警报会被清除。因此,在这个类的
onReceive
中(你有问号),你需要用你第一次在
AndroidScheduledActivity
onClick
方法中使用的相同代码(当然没有
finish()
)重新设置警报

然后,您需要将以下条目放入
清单
,让系统知道在系统启动时启动
AutoStart NotifyReceiver

<receiver android:name=".AutoStartNotifyReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
</receiver>
现在,这都是假设你只有一个警报,并且每次只设置一个方向。如果不是这样的话,情况会变得更复杂一些。但是基于您提供的一点信息,我的解决方案应该满足您的要求


另外,由于您是新来者,这里只是一个善意的提醒:当有人对某个问题提供了适当的答案时,提问者(您)通过单击答案旁边的复选框接受答案。这样回答的人就得到了信任。欢迎来到SO

谢谢,它很管用。只需要进一步改进我的java。我必须加上“上下文”,我不知道确切的原因

public class AutoStartNotifyReceiver extends BroadcastReceiver {
    private final String BOOT_COMPLETED_ACTION = "android.intent.action.BOOT_COMPLETED";
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(BOOT_COMPLETED_ACTION)){

             Intent myIntent = new Intent(context, MyScheduledReceiver.class);
             PendingIntent pendingIntent = PendingIntent.getBroadcast(context,  0, myIntent, 0);

             AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
             Calendar calendar = Calendar.getInstance();
             calendar.setTimeInMillis(System.currentTimeMillis());
             calendar.add(Calendar.SECOND, 10);
             long interval = 60 * 1000;
             alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);           
        }
    }
}
public class AutoStartNotifyReceiver extends BroadcastReceiver {
    private final String BOOT_COMPLETED_ACTION = "android.intent.action.BOOT_COMPLETED";
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(BOOT_COMPLETED_ACTION)){

             Intent myIntent = new Intent(context, MyScheduledReceiver.class);
             PendingIntent pendingIntent = PendingIntent.getBroadcast(context,  0, myIntent, 0);

             AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
             Calendar calendar = Calendar.getInstance();
             calendar.setTimeInMillis(System.currentTimeMillis());
             calendar.add(Calendar.SECOND, 10);
             long interval = 60 * 1000;
             alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);           
        }
    }
}