警报时显示alertDialog?

时间:2011-07-17 01:43:19

标签: android notifications

我想在闹钟响起时显示警告对话框。这是我到目前为止的地方。我不确定我是否正确行事。

}
@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, );

}

}

2 个答案:

答案 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]);
    }
}

}

希望我没有那么漫无边际,但我急于回到其他事业。我没有时间真正编辑帖子。希望这有助于......