(我問這裏是因爲我沒有在Xamarin論壇幫助)我創建這個代碼報警:Xamarin的Android - 如何安排和報警與廣播接收器
Intent alarmIntent = new Intent(context, typeof(AlarmReceiver));
notificationClickIntent = PendingIntent.GetActivity(context, 0, new Intent(), 0);
pendingIntent = PendingIntent.GetBroadcast(context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
am = (AlarmManager)Android.App.Application.Context.GetSystemService(Context.AlarmService);
DateTime setTime = new DateTime(temp.Ticks + offset); //temp is the current time where seconds field = 0
if ((int)Build.VERSION.SdkInt >= 21) //my device enters this case
{
AlarmManager.AlarmClockInfo info = new AlarmManager.AlarmClockInfo(setTime.Ticks, notificationClickIntent);
am.SetAlarmClock(info, pendingIntent);
}
else {
am.SetExact(AlarmType.RtcWakeup, setTime.Ticks, notificationClickIntent);
}
在此之前,代碼的調用,我的課可以確保這些也被執行:
ComponentName receiver = new ComponentName(context, Java.Lang.Class.FromType(typeof(AlarmReceiver)));
PackageManager pm = context.PackageManager;
pm.SetComponentEnabledSetting(receiver, ComponentEnabledState.Enabled, ComponentEnableOption.DontKillApp);
Intent alarmIntent = new Intent(context, typeof(AlarmReceiver));
notificationClickIntent = PendingIntent.GetActivity(context, 0, new Intent(), 0);
pendingIntent = PendingIntent.GetBroadcast(context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
am = (AlarmManager)Android.App.Application.Context.GetSystemService(Context.AlarmService);
這裏是我的接收器:
[BroadcastReceiver (Process = ":remote")]
public class AlarmReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
Console.WriteLine("alarm fired");
Toast.MakeText(context, "Received intent!", ToastLength.Short).Show();
}
}
好,所以接收器正確地被Xamarin註冊了。我知道這一點,因爲如果我將不正確的刻度值賦予AlarmClockInfo(DateTime的刻度範圍之外的值),則警報立即熄滅,並調用我的OnReceive方法。但是,當我給它一個勾號值時,比當前時間提前一分鐘,警報不會熄滅。也許時間是錯的?...似乎不是這樣,因爲我記錄了系統下一次計劃警報的時間,並且在我設定的時間內報告回來。有什麼想法嗎?
編輯:所以我已經有一個正確執行所有這些的Android應用程序。當我將它轉換爲Xamarin和C#時,它不再有效。
https://github.com/commonsguy/cw-omnibus/tree/master/AlarmManager/WakeCast有一個很好的示例。 –
@JonDouglas謝謝,但這是Android Java。所以我已經有一個正確執行所有這些的Android應用程序。當我將它轉換爲Xamarin和C#時,它不再有效。 – sadelbrid
請將它添加到您的原始文章中。 –