2011-07-17 142 views
3

我想在警报关闭时显示警报对话框。这是我到目前为止的地方。林不知道如果我做对了。在报警时显示alertDialog?

} 
@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

报警:

你可以安排一个悬而未决的意图驱动你想要的火警时。处理过程如下:

确定您希望触发报警的频率。您可以在确切的时间,从现在开始的特定时间(10秒内)或特定的时间间隔(每x秒/分钟/等)重复播放。您还可以设置一个特定的时间来启动重复过程。间隔不可变。然后你必须做一个镜头,并在下一次设置另一个警报。您还可以设置确定时间格式的标志(millis,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类执行日期和时间计算。上午afterMidnight()位返回今晚午夜后1分钟。该例程可用于取消未完成的警报。

接收器只是一个普通的广播接收器,你可以做任何事情,你可以在任何其他广播接收器中做。 (不要忘了把通常的东西放在清单中,权限等等。

这里是我使用的接收器减去进口,它非常简单直接,抓取主屏幕上的所有小部件并更新它们更新例程是一个静态函数,它是一个类,因为它是从两个地方驱动的,widget配置和widget提供者,计时器每24小时重新安排一次,警报不会通过一个引导,但提供者的更新是在重新启动时驱动的(所有这些都是新的一天计算被执行,并且更新了部件显示。)您可以放弃我的代码并放入startActivity。 Ooops。几乎忘记了。 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]); 
    } 
} 

}

希望我没有天马行空得多,但我急着回去做其他生意。我没有时间真正编辑帖子。希望这有助于...

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> 

它没有看起来像一个对话框。您可以使用全屏显示,动画,振动和声音进行完整的法庭报道。用户比击中取消键时,一切都会消失。

+0

感谢那正是我正在寻找。你知道这里的任何例子吗?也是一个报警教程的例子。 – yoshi24