уведомление Android как сервис - PullRequest
0 голосов
/ 12 января 2012

Я пытаюсь сделать приложение для запуска уведомлений в определенное время.Конкретное время я вычисляю с помощью очень сложного кода, но это не имеет значения.

Для каждого дня время уведомления отличается, например:

12/01/12 |13.01.12 |14/01/12
n1: 02: 00 |n1: 02: 05 |n1: 02: 06
n2: 07: 00 |N2: 07: 08 |...
n3: 12: 00 |n3: 12: 02 |...
n4: 14: 00 |n4: 13: 59 |...
n5: 20: 00 |n5: 20: 01 |...

Я создал два метода в классе Activity для запуска уведомления в определенное время:

private void createNotification(final String contentTitle, final String contentText,
        final String tickerText) {

    calculateTimes();
    setFirstMillis(getNextTime());

    createStatusBarNotification(contentTitle, contentText, tickerText);

    Notification note = new Notification(android.R.drawable.btn_star_big_on, tickerText, System.currentTimeMillis());

    PendingIntent intent = PendingIntent.getActivity(this, 0, new Intent(this, VakActivity.class), 0);

    note.setLatestEventInfo(this, contentTitle, contentText, intent);

    note.vibrate = new long[]{1000,1000,1000,1000,1000};
    note.defaults |= Notification.DEFAULT_LIGHTS;

    note.sound = Uri.parse(getAlarmTone());

    note.flags |= Notification.FLAG_AUTO_CANCEL;
    note.flags |= Notification.FLAG_INSISTENT;
    notificationManager.notify(NOTIF_ID, note);
}

private void createStatusBarNotification(final String contentTitle,
        final String contentText, final String tickerText) {

    Date date = new Date(getFirstMillis());

    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            createNotification(contentTitle, contentText, tickerText);
        }
    };
    timer.schedule(timerTask, date);
}

Я запустил метод createStatusBarNotification в:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    ...
    ...
    createStatusBarNotification("Title", "Text",
            "tickerText");

}

Но я хочу запустить это уведомление как службу.

Я пытаюсь создать новый класс

public class StartNotificationService extends Service

Но я не знаю, что мне нужно написать в этом классе и как, когда иЗапустите этот класс.


Обновление:

Я создал новый метод в Activity, который я вызвал из метода onCreate

public void setOneTimeAlarm() {
      Intent intent = new Intent(this, StartNotificationService.class);
      PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
        intent, PendingIntent.FLAG_ONE_SHOT);
      am.set(AlarmManager.RTC_WAKEUP,
        System.currentTimeMillis() + (5 * 1000), pendingIntent);
}

Класс StartNotificationService:

public class StartNotificationService extends BroadcastReceiver {

    private static final int NOTIF_ID = 1234;

    private Pror pror;
    private Context cntx;
    private NotificationManager notificationManager;

    @Override
    public void onReceive(Context context, Intent intent) {
        cntx = context;

        notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);


      createStatusBarNotification("Title", "Text",
            "tickerText");
    }

    private void createStatusBarNotification(final String contentTitle,
            final String contentText, final String tickerText) {

        Date date = new Date(pror.getFirstMillis());
        Log.i("date", date.toString());

        Timer timer = new Timer();
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                createNotification(contentTitle, contentText, tickerText);
            }
        };
        timer.schedule(timerTask, date);
    }

    private void createNotification(final String contentTitle, final String contentText,
            final String tickerText) {

        pror.calculateVak();
        pror.setFirstMillis(pror.getNextVak());

        createStatusBarNotification(contentTitle, contentText, tickerText);

        Notification note = new Notification(android.R.drawable.btn_star_big_on, tickerText, System.currentTimeMillis());

        PendingIntent intent = PendingIntent.getActivity(cntx, 0, new Intent(cntx, VakActivity.class), 0);

        note.setLatestEventInfo(cntx, contentTitle, contentText, intent);

        note.vibrate = new long[]{1000,1000,1000,1000,1000};
        note.defaults |= Notification.DEFAULT_LIGHTS;

        note.sound = Uri.parse(pror.getAlarmTone());

        note.flags |= Notification.FLAG_AUTO_CANCEL;
        note.flags |= Notification.FLAG_INSISTENT;
        notificationManager.notify(NOTIF_ID, note);
    }
}

Я хочу отправить переменную из Activity в StartNotificationService.Как я могу это сделать?

Проблема в переменной Pror.Эту переменную я задаю в Activity (читай настройки, ...) и хочу, чтобы этот экземпляр в классе StartNotificationService имел значение.

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Сначала вы должны использовать диспетчер тревог и используйте сигнализацию в сервисе, потому что, когда сервис работает в фоновом режиме, он будет проверять время, когда вы хотите показать уведомление и показать уведомление. Я думаю, что это может помочь. * 1001 спасибо *

0 голосов
/ 12 января 2012

Рассмотрите возможность использования AlarmManager: запланируйте время на время, которое вы рассчитали в соответствии с вашим алгоритмом, и отправьте уведомление при срабатывании будильника.См. Здесь http://developer.android.com/reference/android/app/AlarmManager.html

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

Обновление (см. Комментарий ниже): Почему бы вам не записать значение переменной pror (в виде строки или того, что предлагает тип Pror) в общие предпочтения и прочитать общие предпочтения позже, когда вам потребуется это значение.

...