如何自动启动AlarmManager以启动预定活动?
本教程来自android-er, 主要活动(AndroidScheduledActivity.java)启动一个AlarmManager来重复触发BroadcastReceiver(MyScheduledReceiver.java)。在MyScheduledReceiver的onReceive()方法中,它间接启动另一个活动(MyScheduledActivity.java)。这样活动(MyScheduledActivity.java)将按计划的时间间隔开始。 现在我将使用AutoStart自动启动,但我无法写入AutoStartNotifyReceiver。 请你能给我一个想法如何管理它? 非常感谢!如何自动启动AlarmManager以启动预定活动?
主要活动,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();
}});
}
}
然后广播接收器,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);
}
}
和我的问题AutoStartNotifyReceiver:
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)){
????????????????????
}
}
}
你AutoStartNotifyReceiver extends BroadcastReceiver
类是存在的,因为设备重置时,警报会被清除。因此,在该课程的onReceive
(您有问号)中,您需要重新设置警报,并使用onClick
方法中第一次使用相同的代码(当然,不包括finish()
) AndroidScheduledActivity
。
然后,你需要把下面的项在您的Manifest
,让系统知道要启动您AutoStartNotifyReceiver
在系统启动时达:
<receiver android:name=".AutoStartNotifyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
除了在Manifest
权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
现在,这是假设你只有一个警报,并且每次只设置一个方向。如果情况并非如此,则会变得更复杂一些。但根据你提供的信息,我的解决方案应该做你想做的。
此外,由于您是新来者,因此您只需提醒一下:当某人提供问题的适当答案时,提问者(您)通过点击答案旁边的复选框接受答案。这是回答人的信用。欢迎来到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);
}
}
}