如何在我的应用程序关闭后执行 alarmmanager?
How do I make alarmmanager execute after my application has been closed?
我想让我的 alarmmanager 在我的应用程序关闭后响起。
但是现在我的代码在我的应用程序关闭后不调用 broadcastreceiver。
我在我的清单中注册了我的广播接收器。
这是设置alarmmanager的代码
final AlarmManager alarmManager=(AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent=new Intent(setTimeActivity.this,autoCheckReceiver.class);
intent.setAction("com.dayo.selfcheck.autoCheckReceiver");
final PendingIntent pendingIntent=PendingIntent.getBroadcast(setTimeActivity.this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.cancel(pendingIntent);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, timePicker.getHour());
calendar.set(Calendar.MINUTE, timePicker.getMinute());
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
这段代码是我的广播接收器。
public class autoCheckReceiver extends BroadcastReceiver {
private String TAG="autoCR";
@Override
public void onReceive(Context context, Intent it) {
Log.d(TAG,"asdf");
Intent i = new Intent();
i.setClassName("com.dayo.selfcheck", "com.dayo.selfcheck.MainActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
这是我的清单文件。
<receiver
android:name=".autoCheckReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.dayo.selfcheck.autoCheckReceiver"></action>
</intent-filter>
</receiver>
谢谢!
您必须在 <receiver>
声明中指定 android:exported="true"
,以便 AlarmManager
启动您的 BroadcastReceiver
。
您不需要在 AlarmManager
上调用 cancel()
来取消 Intent
,因为 AlarmManager
会自动执行此操作。
您不需要在 Intent
中为广播设置 ACTION
,因为您使用的是显式 Intent
(您已指定要使用的确切组件) .
您也不需要在 <receiver>
声明中提供 <intent-filter>
,因为您使用的是显式广播。
我想让我的 alarmmanager 在我的应用程序关闭后响起。
但是现在我的代码在我的应用程序关闭后不调用 broadcastreceiver。
我在我的清单中注册了我的广播接收器。
这是设置alarmmanager的代码
final AlarmManager alarmManager=(AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent=new Intent(setTimeActivity.this,autoCheckReceiver.class);
intent.setAction("com.dayo.selfcheck.autoCheckReceiver");
final PendingIntent pendingIntent=PendingIntent.getBroadcast(setTimeActivity.this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.cancel(pendingIntent);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, timePicker.getHour());
calendar.set(Calendar.MINUTE, timePicker.getMinute());
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
这段代码是我的广播接收器。
public class autoCheckReceiver extends BroadcastReceiver {
private String TAG="autoCR";
@Override
public void onReceive(Context context, Intent it) {
Log.d(TAG,"asdf");
Intent i = new Intent();
i.setClassName("com.dayo.selfcheck", "com.dayo.selfcheck.MainActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
这是我的清单文件。
<receiver
android:name=".autoCheckReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.dayo.selfcheck.autoCheckReceiver"></action>
</intent-filter>
</receiver>
谢谢!
您必须在 <receiver>
声明中指定 android:exported="true"
,以便 AlarmManager
启动您的 BroadcastReceiver
。
您不需要在 AlarmManager
上调用 cancel()
来取消 Intent
,因为 AlarmManager
会自动执行此操作。
您不需要在 Intent
中为广播设置 ACTION
,因为您使用的是显式 Intent
(您已指定要使用的确切组件) .
您也不需要在 <receiver>
声明中提供 <intent-filter>
,因为您使用的是显式广播。