Отображать alertDialog при тревоге? - PullRequest
3 голосов
/ 17 июля 2011

Я хотел бы отобразить диалоговое окно с предупреждением при срабатывании будильника.Вот где я так далеко.Я не уверен, правильно ли я это делаю.

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

2 голосов
/ 18 июля 2011

Тревога:

Вы можете запланировать ожидающее намерение, которое управляет тем, что вы хотите, когда срабатывает сигнализация.Процесс такой:

Определите, как часто вы хотите, чтобы сработала сигнализация.Вы можете стрелять в точное время, через определенное время (через 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 выполняет вычисления даты и времени.вышеприведенный бит afterMidnight () возвращается через 1 минуту после полуночи.Эта процедура может быть использована только для отмены неподтвержденного сигнала тревоги.

Приемник - это обычный приемник вещания, и вы можете делать в нем все, что можете делать в любом другом приемнике вещания.(Не забудьте поместить обычные вещи в манифест. Разрешения и тому подобное.

Вот получатель, который я использую меньше импорта. Это довольно просто. Он захватывает все виджеты, которые включеныДомашние экраны и их обновление. Процедура обновления является статической функцией в поставщике виджетов. Это класс, потому что он управляется из двух мест. Конфигурация виджета и поставщик виджетов. Таймер переносится каждые 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]);
    }
}

}

Надеюсь, я не слишком много путешествовал, но я тороплюсьчтобы вернуться к другому делу. У меня нет времени, чтобы действительно отредактировать сообщение. Надеюсь, это помогло ...

2 голосов
/ 17 июля 2011

Вам действительно нужно уведомление?Почему бы не запустить действие, которое может сделать уведомление о тревоге и исчезнуть.Вы можете подать сигнал тревоги, вибрировать телефон, что угодно.Даже сделайте уведомление, если вы все еще хотите ...

    Intent intent = new Intent(context.MyAlarmResponse);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("REASONFORALARM", "What ever you want");
    context.startActivity(intent);

В манифесте используйте следующую тему, чтобы выглядеть как диалог:выглядеть как диалогВы можете сделать полный суд с полноэкранным дисплеем, анимацией, вибрацией и звуком.Пользователь, чем нажать ваш ключ отмены, и все это уходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...