Android перезагружается, когда я пытаюсь установить приоритет службы - PullRequest
1 голос
/ 16 марта 2011

Я столкнулся со странным поведением в моем приложении: при попытке установить передний план службы телефон (HTC G1 + Cyanogen Mod) перезагружается.

Это работает, когда я не пытаюсь выйти на передний планэтот сервис.

Вот инкриминированный код:

Notification notification = new Notification(R.drawable.icon,
    getText(R.string.ticker_text), System.currentTimeMillis());
    startForeground(SERVICE_NOTIFICATION_ID, notification);
Log.v(TAG, "Control service foregrounded.");

Можете ли вы увидеть, в чем проблема?

Если вам нужно больше данных, весь проект можно найтина GitHub: https://github.com/rbochet/Serval-Video-Discovery/tree/network-remote

Спасибо.

1 Ответ

0 голосов
/ 16 марта 2011

Посмотрите эту демонстрацию API Android здесь .Обратите внимание, что вместо вызова startForeground() он вызывает startForegroundCompat(), оболочку, которая обрабатывает ваш запрос в зависимости от нового / старого API startForeground.

void handleCommand(Intent intent) {
        if (ACTION_FOREGROUND.equals(intent.getAction())) {
            ...

            // Set the icon, scrolling text and timestamp
            Notification notification = new Notification(R.drawable.stat_sample, text,
                    System.currentTimeMillis());

            // The PendingIntent to launch our activity if the user selects this notification
            PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                    new Intent(this, Controller.class), 0);

            // Set the info for the views that show in the notification panel.
            notification.setLatestEventInfo(this, getText(R.string.local_service_label),
                           text, contentIntent);

            startForegroundCompat(R.string.foreground_service_started, notification);
            ...
    }

Вот startForegroundCompat():

/**
 * This is a wrapper around the new startForeground method, using the older
 * APIs if it is not available.
 */
void startForegroundCompat(int id, Notification notification) {
    // If we have the new startForeground API, then use it.
    if (mStartForeground != null) {
        mStartForegroundArgs[0] = Integer.valueOf(id);
        mStartForegroundArgs[1] = notification;
        invokeMethod(mStartForeground, mStartForegroundArgs);
        return;
    }

    // Fall back on the old API.
    mSetForegroundArgs[0] = Boolean.TRUE;
    invokeMethod(mSetForeground, mSetForegroundArgs);
    mNM.notify(id, notification);
}
...