警报管理器未在特定时间执行任务



我想每天在特定时间设置壁纸,为此,我正在使用 android 中的 AlarmManager 来调用设置壁纸函数。这是我设置警报以更改壁纸的代码:

public void setTime() {
alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, reciveBrodcast.class);
alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 14);
calendar.set(Calendar.MINUTE, 40);

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent);
}

我正在MainActivity.class的 onCreate(( 函数中初始化这个函数:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTime();
}

setTime 函数启动了一个reciveBrodcast.class,我正在调用 setWallpaper 函数,如下所示:

public class reciveBrodcast extends BroadcastReceiver  {
quotePresenter presenter =new quotePresenter();
@Override
public void onReceive(Context context, Intent intent) {
presenter.downloadTaskIn();
}

这里的演示器是一个具有 downloadTaskIn(( 来设置墙纸的类。 但是这段代码不起作用,当我使用 on 按钮尝试此功能时,它正在工作。请帮助我如何在特定时间调用此事件。

我的主力 :

<receiver android:name=".View.reciveBrodcast" android:process=":remote" />
<activity android:name=".View.MainActivity">

请尝试下面的代码。

Class帮助程序来设置闹钟。

public class AlarmSetter {
private final String TAG = "AlarmSetter";
private final int REQUEST_CODE = 9587;
private Context context;
public AlarmSetter(Context context) {
this.context = context;
}
public void setAlarm() {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (alarmManager == null) {
Log.e(TAG, "ALARM_SERVICE was null :(");
return;
}
Intent intent = new Intent(context, BRWallpaperChanger.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, 0);
cancelPreviousAlarm(alarmManager, pendingIntent);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 14);
calendar.set(Calendar.MINUTE, 40);
calendar.set(Calendar.SECOND, 0);
long when;
if (System.currentTimeMillis() <= calendar.getTimeInMillis()) {
when = calendar.getTimeInMillis();
} else {
when = calendar.getTimeInMillis() + 86400 * 1000; // Add one day in exact time
}
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
alarmManager.set(AlarmManager.RTC_WAKEUP, when, pendingIntent);
} else if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, when, pendingIntent);
} else {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, when, pendingIntent);
}
Log.d(TAG, "Next trigger set for at " + new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(when));
}
private void cancelPreviousAlarm(AlarmManager alarmManager, PendingIntent pendingIntent) {
alarmManager.cancel(pendingIntent);
}
}

现在在你的MainActivityonCreate()

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AlarmSetter alarmSetter = new AlarmSetter(context);
alarmSetter.setAlarm();
}

您设置壁纸BroadcastReceiver

public class BRWallpaperChanger extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Set Alarm for next time...
AlarmSetter alarmSetter = new AlarmSetter(context);
alarmSetter.setAlarm();
// Change wallpaper here...
}
}

在您的AndroidMenifest.xml

<receiver
android:name=".BRWallpaperChanger"
android:enabled="true"
android:exported="false" />

请让我知道代码是否有效。

最新更新