我使用此代碼通過廣播接收器激活週期性報警:
public class UpdateReceiver extends BroadcastReceiver {
public static final String LOG_TAG = "camerawatch.alarmactivator";
public static final String ACTION = "de.pribluda.android.camerawatch.UPDATE_ALARM";
public static void activate(Context context) {
AlarmManager alarmService = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_NO_CREATE);
Log.d(LOG_TAG, "pending intent: " + pendingIntent);
// if no intent there, schedule it ASAP
if (pendingIntent == null) {
pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
// schedule new alarm in 15 minutes
alarmService.setInexactRepeating(AlarmManager.RTC, System.currentTimeMillis(),300000, pendingIntent);
Log.d(LOG_TAG, "scheduled intent: " + pendingIntent);
}
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d(LOG_TAG, "received intent: " + intent);
CameraWidgetProvider.displayCurrentState(context);
}
}
。注意,激活靜態方法完成的,所以我可以從幾乎無處不在調用它。 如果並且只有沒有這樣的未決意圖,我才安排警報。至於上下文 - 它幾乎在任何地方都可用 - 在廣播接收機(serice方法參數)中的活動(它是上下文本身)等等。
PS:廣播接收機比服務更好,因爲它不會一直運行。當服務方法返回時,它會被停止並且應用程序可能被處置(unles它會做其他事情,但大多數情況下它會保持在後臺)。這提供了更好的電池壽命
它的工作原理......謝謝....另外是我添加名稱的意圖,我正在過濾意圖的名稱...所以不需要指定在意圖的警報接收器。感謝:D – drulabs
命名意圖通常是一個好主意 –