Как я могу передать Намерение Сервису при его запуске (но только иногда) - PullRequest
1 голос
/ 14 апреля 2011

Итак, я работаю над Android-приложением для школьного проекта и обнаружил странную ошибку в конце разработки.Частью приложения является Служба, которая работает в фоновом режиме и время от времени регистрируется на сервере, но должна быть возможность запустить службу в фоновом режиме или использовать ручные проверки.Чтобы избежать дублирования кода, я попытался передать Intent сервису, когда он начинается с логического значения, типа «Принудительно обновить один раз, затем остановить».Однако My Service, похоже, не получает это значение.

Код, который запускает службу:

Intent intent = new Intent(this, EmpCheckinService.class);
intent.putExtra("singleCheckInOnly", true);
intent.putExtra("locationString", location);

startService(intent);

И код в классе Service:

// This is the old onStart method that will be called on the pre-2.0
// platform.  On 2.0 or later we override onStartCommand() so this
// method will not be called.
@Override
public void onStart(Intent intent, int startId) {
    examineIntent(intent);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    examineIntent(intent);
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

private void examineIntent(Intent intent) {
    try {
        singleCheckInOnly = intent.getExtras().getBoolean("singleCheckInOnly", false);
        locationString = intent.getExtras().getString("locationString");
    } catch (Exception e) {
        // Don't need to do anything here, just prevent from crashing if the keys aren't found
    }
}

Как вы можете видеть, у меня есть onStart и onStartCommand, которые позволяют ему работать на устройствах 1.5 или 2.1+, но он никогда не запускает ни одну из этих функций.Кто-нибудь может указать мне правильное направление здесь?

РЕДАКТИРОВАТЬ: Я думаю, что нашел проблему.Вызывается ли onCreate перед onStartCommand?

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

Вызывается ли onCreate перед onStartCommand?

Да.

Это будет значительно проще и удобнее, если вы:

Шаг # 1: Создайте IntentService вместо Service и

Шаг # 2: Используйте AlarmManager для отправки Intents в службу для периодических проверок с сервером

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

0 голосов
/ 10 июля 2014

если у вас есть более 1 дополнительных для размещения, то предпочтительно использовать связку

Tos отправить дополнительные использовать-

 Intent i = new Intent(sender.this,receiver.class);
           Bundle extras = new Bundle();
    extras.putString("key1",element);
    extras.putString("key1",element);
    extras.putString("key2",element2);
    extras.putString("key3",element3);
    extras.putString("key4",element4);
  ......so on
        i.putExtras(extras);

для получения использования-

   Bundle extras2 = getIntent().getExtras();

            if (extras != null){
            final String str = extras2.getString("key1");
final String str = extras2.getString("key2");
final String str = extras2.getString("key3");
final String str = extras2.getString("key4");
final String str = extras2.getString("key5");
......so  on
...