2011-07-17 193 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