Активность в ожидании намерения - PullRequest
1 голос
/ 22 декабря 2011

Что я пытаюсь сделать


Здравствуйте, ребята, я пытаюсь создать SplashScreen, который запускает службу через намерение. После запуска Сервиса в Activity (SplashScreen) следует подождать, пока он не получит Намерение от моего Сервиса.

Вопрос


Что мне нужно сделать, чтобы моя Деятельность ожидала, пока не получит Намерение от моей Службы. Было бы неплохо, если бы вы могли предоставить мне хороший учебник или несколько фрагментов кода. Здесь вы найдете код моего SplashScreen.

Код


package de.stepforward;

import de.stepforward.service.VideoService;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class SplashActivity extends Activity {

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

        // Sagt dem Video-Service das er beginnen soll die
        // Videos herunter zu laden
        Intent LoadVideos = new Intent(this, VideoService.class);
        LoadVideos.putExtra("VIDEO_SERVICE", "start");
        startService(LoadVideos);

        // In this thread I want that it waits for my Intent
        // and than it goes to the next Activity
        Thread splashThread = new Thread() {

            @Override
            public void run() {
                try {
                    int waited = 0;
                    while (waited < 3000) {
                        sleep(100);
                        waited += 100;
                    }
                }
                catch (InterruptedException e) {
                    // do nothing
                }
                finally {
                    finish();
                    final Intent Showvideo = new Intent(SplashActivity.this,
                                                        ChannelTest.class);
                    startActivity(Showvideo);
                }
            }
        };
        splashThread.start();
    }
}

Ответы [ 3 ]

1 голос
/ 22 декабря 2011

Вот как должна выглядеть ваша архитектура:

INTENT_CST


String START_INIT_ACTION = "your.package.name.START_INIT";
String INIT_ENDED_ACTION = "your.package.name.INIT_ENDED";

SplashActivity


InCreate:

startService(new Intent(START_INIT_ACTION)

В onResume:
Если вы решили отправить трансляцию в свой сервис:

registerReceiver(new BroadcastReceiver(){
    //implement onChange()},
    new IntentFilter(INIT_ENDED_ACTION));

В режиме onPause отмените регистрацию приемника, чтобы освободить память

LoadingService


Расширьте AsyncTask, чтобы сделать фоновые вещи. В onPostExecute, 2 варианта:

startActivity(new Intent(...)) // as your doing in your post

или

sendBroadcast(new Intent(INIT_ENDED_ACTION)); stopSelf();

Ваш манифест


Объявите сервис LoadingService с IntentFilter с <action name="your.package.name.START_INIT"/>

1 голос
/ 22 декабря 2011

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

Restful API service

0 голосов
/ 22 декабря 2011

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

...