Многим обладателям телефонов с Android, владеющим элементарными навыками программирования, хотелось или захочется написать свою «программку для телефона». Учитывая рост популярности этой ОС и факт существования Android Market, эта идея может еще и денег принести.
Особенность Android в том, что ребята из Google дают разработчику разрешение использовать все (вернее, почти все) возможности телефона. Можно перехватывать звонки, рассылать SMS, и многое другое. Одна из полезных вещей — уведомления, появляющиеся в соответствующей области вверху экрана. В этом посте я расскажу, как легко и просто их организовать.
Итак, ставим задачу: в определенное время, ежедневно, уведомлять пользователя о необходимости запустить приложение и что-то в нем сделать. Ну и совсем здорово, если по нажатию на уведомление запустится нужное приложение.
Нам понадобятся следующие классы:
AlarmManager — собственно, эта штука и умеет генерировать системные события по заданым параметрам
BroadcastReceiver — для обработки событий AlarmManager
NotificationManager — а эта штука умеет показывать уведомления
Первым делом, создадим класс — приемник:
Обязательно следует упомянуть об этом в манифесте (в разделе application):
Затем, идем в основной класс нашего приложения (допустим, MainActivity). Здесь нам необходимо обеспечить функционал по запуску и настройке AlarmManager.
Предположим, что задачу установки пользователем настроек мы уже решили, и у нас есть глобальная переменная stamp, в которой хранится время следующего показа уведомления.
Почему разовое, спросите вы? У AlarmManager есть метод setRepeat, где можно задать интервал. Но мне кажется, проще перезапустить процесс при обработке события, на случай смены настроек и т.п. Хотя, это личное дело каждого, оба варианта будут работать.
Ну и, собственно, реализуем обработчик
Вот и все. Надеюсь, в будущем написать и о других простых, но полезных возможностях для разработчика приложений под Android
Особенность Android в том, что ребята из Google дают разработчику разрешение использовать все (вернее, почти все) возможности телефона. Можно перехватывать звонки, рассылать SMS, и многое другое. Одна из полезных вещей — уведомления, появляющиеся в соответствующей области вверху экрана. В этом посте я расскажу, как легко и просто их организовать.
Итак, ставим задачу: в определенное время, ежедневно, уведомлять пользователя о необходимости запустить приложение и что-то в нем сделать. Ну и совсем здорово, если по нажатию на уведомление запустится нужное приложение.
Нам понадобятся следующие классы:
AlarmManager — собственно, эта штука и умеет генерировать системные события по заданым параметрам
BroadcastReceiver — для обработки событий AlarmManager
NotificationManager — а эта штука умеет показывать уведомления
Первым делом, создадим класс — приемник:
public class TimeNotification extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Этот метод будет вызываться по событию, сочиним его позже
}
}
Обязательно следует упомянуть об этом в манифесте (в разделе application):
<receiver android:name=".TimeNotification" />
Затем, идем в основной класс нашего приложения (допустим, MainActivity). Здесь нам необходимо обеспечить функционал по запуску и настройке AlarmManager.
Предположим, что задачу установки пользователем настроек мы уже решили, и у нас есть глобальная переменная stamp, в которой хранится время следующего показа уведомления.
private void restartNotify() {
am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, TimeNotification.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
intent, PendingIntent.FLAG_CANCEL_CURRENT );
// На случай, если мы ранее запускали активити, а потом поменяли время,
// откажемся от уведомления
am.cancel(pendingIntent);
// Устанавливаем разовое напоминание
am.set(AlarmManager.RTC_WAKEUP, stamp.getTime(), pendingIntent);
}
Почему разовое, спросите вы? У AlarmManager есть метод setRepeat, где можно задать интервал. Но мне кажется, проще перезапустить процесс при обработке события, на случай смены настроек и т.п. Хотя, это личное дело каждого, оба варианта будут работать.
Ну и, собственно, реализуем обработчик
public void onReceive(Context context, Intent intent) {
nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.icon, "Test", System.currentTimeMillis());
//Интент для активити, которую мы хотим запускать при нажатии на уведомление
Intent intentTL = new Intent(context, MainActivity.class);
notification.setLatestEventInfo(context, "Test", "Do something!",
PendingIntent.getActivity(context, 0, intentTL,
PendingIntent.FLAG_CANCEL_CURRENT));
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL;
nm.notify(1, notification);
// Установим следующее напоминание.
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + AlarmManager.INTERVAL_DAY, pendingIntent);
}
Вот и все. Надеюсь, в будущем написать и о других простых, но полезных возможностях для разработчика приложений под Android