我有一个在固定时间执行AlarmReceiver的类(在android启动后启动)。我添加了sharedpreferences来禁用和启用警报。如果我禁用并重新启用,则报警不会运行。我需要重启模拟器。我可以避免模拟器重启吗?谢谢!
public class AutoStart extends BroadcastReceiver {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
CheckboxPreference = prefs.getBoolean("checkboxPref", true);
Calendar cal4 = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
cal4.set(Calendar.DATE,31);
cal4.set(Calendar.MONTH,Calendar.DECEMBER);
cal4.set(Calendar.YEAR,2012);//year...
cal4.set(Calendar.HOUR_OF_DAY, 23);
cal4.set(Calendar.MINUTE, 59);
cal4.set(Calendar.SECOND, 00);
Intent intent2 = new Intent(context, AlarmReceiver.class);
PendingIntent Alarm1 = PendingIntent.getBroadcast(context, 0, intent2, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal4.getTimeInMillis(), DateUtils.DAY_IN_MILLIS, Alarm1);清单:
<receiver android:name="AutoStart">
<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>发布于 2013-01-01 04:09:45
您要做的第一件事是创建一个静态方法,使警报放在AutoStart中
public static modifyAlarm (Context context, boolean cancel)
{
Calendar cal4 = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
cal4.set(Calendar.DATE,31);
cal4.set(Calendar.MONTH,Calendar.DECEMBER);
cal4.set(Calendar.YEAR,2012);//year...
cal4.set(Calendar.HOUR_OF_DAY, 23);
cal4.set(Calendar.MINUTE, 59);
cal4.set(Calendar.SECOND, 00);
Intent intent2 = new Intent(context, AlarmReceiver.class);
PendingIntent Alarm1 = PendingIntent.getBroadcast(context, 0, intent2, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService (Context.ALARM_SERVICE);
if (cancel)
alarmManager.cancel (Alarm1);
else
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal4.getTimeInMillis(), DateUtils.DAY_IN_MILLIS, Alarm1);
}在AutoStart的onReceive()中这样调用它:
@Override
public void onReceive (Context context, Intent intent)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
makeAlarm (context, prefs.getBoolean("checkboxPref", true));
}现在,您的首选项必须是某个Activity的一部分。为了简单起见,我们将负责处理该活动的onPause()中的警报;
@Override
protected void onPause()
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean alarmEnabled = prefs.getBoolean("checkboxPref", true);
AutoStart.modifyAlarm (this, alarmEnabled);
super.onPause();
}现在,当用户取消或重新启用您的警报时,您的代码会处理此问题。如果您在PendingIntent上调用cancel,它将在有效时取消警报,如果无效则不执行任何操作,因此我们不必担心检查警报是否已经存在。
发布于 2013-01-01 03:10:10
<receiver android:name=".AutoStart">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>更新:
SharedPreferences yourPreferences = getSharedPreferences("prefName", MODE_PRIVATE);
if (!yourPreferences.getBoolean("prefName", false)) {
Editor editor = yourPreferences.edit();
editor.clear();
// add your logic here
//editor.putBoolean("prefName", false);
//editor.putInt("userId", -1);
editor.commit();
}然后使用如下所示的代码
userId = yourPreferences.getBoolean("userId", -1);https://stackoverflow.com/questions/14105219
复制相似问题