我想在闹钟响起时显示警告对话框。这是我到目前为止的地方。我不确定我是否正确行事。
}
@Override
void doTaskWork(Intent intent){
String taskId = intent.getStringExtra(TaskHelper._id);
NotificationManager mgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Intent notificationIntent = new Intent(this, TaskDetails.class);
notificationIntent.putExtra(TaskHelper._id, taskId);
PendingIntent pi = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT);
Notification note = new Notification(R.drawable.stat_sys_warning, );
}
}
答案 0 :(得分:2)
你真的需要通知吗?为什么不启动可以执行警报通知并消失的活动。你可以发出警报,振动电话,无论如何。如果你还想要发出通知......
Intent intent = new Intent(context.MyAlarmResponse);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("REASONFORALARM", "What ever you want");
context.startActivity(intent);
在清单中,使用以下主题看起来像一个对话框:
<activity android:name=".MyAlarmResponse"
android:theme="@android:style/Theme.Dialog">
</activity>
它不必看起来像一个对话框。您可以使用全屏幕显示,动画,振动和声音进行全面的新闻报道。用户点击你的取消键,一切都消失了。
答案 1 :(得分:2)
报警:
您可以安排一个待处理的意图,在警报触发时驱动您想要的内容。这个过程是:
确定您希望闹钟触发的频率。您可以在确切的时间,从现在开始的特定时间(10秒钟内)开始,或者以一定间隔(每隔x秒/分钟/等)进行特定重复。您还可以设置特定时间来开始重复过程。间隔不可变。然后你必须做一次拍摄并在下一次设置另一个警报。您还可以设置标志来确定时间格式(毫秒,RTC,...)。最后,您可以让闹钟触发唤醒设备或让它睡眠并在下次手机唤醒时安排。
现在,关于预定的内容。计划待处理的意图。未决意图唤醒广播接收器。这是我用来在每天午夜1分钟发射计时器的一些代码片段。 (它更新了必须每天更新的小部件。)
Intent intent = new Intent(context, DaysReceiver.class);
PendingIntent receiverIntent = PendingIntent.getBroadcast(context,
DaysConstants.UPDATE_ALARM,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Schedule the alarm!
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(receiverIntent);
if (cancelAlarm) {
MyLog.d(TAG, "setAlarm cancel");
return;
}
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
JodaTime jtime = new JodaTime();
am.set(AlarmManager.RTC_WAKEUP, jtime.afterMidnight(), receiverIntent);
//am.setRepeating(AlarmManager.RTC_WAKEUP, jtime.nowPlusMillis(30 * 1000),
// 30 * 1000, receiverIntent);
MyLog.d(TAG, "setAlarm set");
}
JodaTime类进行日期和时间计算。今晚午夜后1分钟,上面的afterMidnight()位返回。该例程可用于取消未完成的警报。
接收器只是一个普通的广播接收器,您可以在任何其他广播接收器中执行任何操作。 (不要忘记将通常的东西放在清单中。权限,等等。
这是我使用的接收器少了进口。这很直接。它抓取主屏幕上的所有小部件并更新它们。更新例程是窗口小部件提供程序中的静态函数。这是一个类,因为它是从两个地方驱动的。小部件配置和小部件提供程序。计时器每24小时重新安排一次。警报不会通过启动生效,但提供程序的更新是在重启时驱动的。 (所有发生的事情都是执行新的一天计算并更新小部件显示。)您可以删除我的代码并输入startActivity。 糟糕!差点忘了。使用PendingIntent.FLAG_UPDATE_CURRENT,这样就不会意外地叠加多个意图......
public class DaysReceiver extends BroadcastReceiver {
static String TAG = "DaysReceiver";
@Override
public void onReceive(Context context, Intent intent) {
MyLog.d(TAG, "onReceive");
updateWidgets(context);
}
private void updateWidgets(Context context) {
MyLog.d(TAG, "updateWidgets");
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName componentName = new ComponentName(context, DaysProvider.class);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(componentName);
final int N = appWidgetIds.length;
if (N < 1) {
MyLog.d(TAG, "No widgets");
return;
}
for (int i = 0; i < N; i++) {
MyLog.d(TAG, "Update widget " + Integer.toString(appWidgetIds[i]));
DaysProvider.updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
}
}
}
希望我没有那么漫无边际,但我急于回到其他事业。我没有时间真正编辑帖子。希望这有助于......