Как начать нативную активность, пока текущая активность еще не начата - PullRequest
4 голосов
/ 01 августа 2011

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

Итак, чтобы объяснить ...

Мне нужно запустить родное видео и воспроизвести видео в зависимости от некоторых условий.Поэтому вместо следующего:

1. User launch an app (main activity is started)
2. Welcome screen is displayed while the app is loading
3. App is ready & running

мне нужно что-то вроде этого:

1. User launch an app
1.1. Check If some video is available
1.2. Play the video 
1.3. Once the video is finished or user press the back key, continue to step 2.
2. Welcome screen is displayed while the app is loading
3. App is ready & running

Моя текущая попытка основана на том факте, что действие приостанавливается, как только появляется какое-то новое действиеначалось, поэтому я просто начинаю видеообращение в вызове onResume основного действия:

public void onResume()
{
    super.onResume();
    if (someCondition && !videoIsPlayed)
    {
        videoIsPlayed = true;
        Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
        final Uri data = Uri.parse(videoURL);
        intent.setDataAndType(data, "video/mp4");
        startActivity(intent);
    }
}

Однако я не нашел никаких доказательств того, что приведенный выше код действительно безопасен ...

Другая идея, которую я имею, состоит в том, чтобы представить два действия, которые были бы чем-то вроде выбора действий, где в onCreate я бы выбрал, какое действие начать:

// Chooses which activity to start
public class ActivityChooser extends Activity
{
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        if (someCondition)
        {
            // start main application activity
        } else 
        {
            // start activity that plays the video using the native video activity
        }
        finish();
    }
}

И еще одно действие, которое запускает родное видео-действие

// Starts the native video activity and once it finishes starts the main app activity
public class VideoPlayback extends Activity
{
    public void onResume()
    {
        super.onResume();
        if (someCondition && !videoIsPlayed)
        {
            videoIsPlayed = true;
            Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
            final Uri data = Uri.parse(videoURL);
            intent.setDataAndType(data, "video/mp4");
            startActivity(intent);

            // Question that remains here is how to know when the native video activity is done with
            // the playback in order to start main application activity
        }
    }
}

РЕДАКТИРОВАТЬ: Поскольку ответов не так много, можно прокомментировать мой первый подход.

Так что любые предложения приветствуются!

Спасибо заранее!

1 Ответ

2 голосов
/ 02 августа 2011

В onResume () ваша активность находится в рабочем состоянии и будет в этом состоянии до вызова onPause. В этом состоянии безопасно вызывать новое действие. Ваш код в onResume:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
final Uri data = Uri.parse(videoURL);
startActivity(intent);

хорошо (хотя, очевидно, вы должны сделать что-то с URI). Это заставит основную активность приостановить и запустить видео активность. Помещать это в другой вид деятельности в значительной степени не нужно; однако, поскольку вы хотите знать, когда заканчивается видео, вы можете использовать VideoView в своей активности VideoPlayback, а не запускать его с новым намерением. Затем вы можете прикрепить setOnCompletionListener (MediaPlayer.OnCompletionListener l), чтобы получать информацию о завершении видео, и возвращать результат в основное намерение (которое будет вызывать VideoPlayback с помощью startActivityForResult и получать уведомление о его завершении в onActivityResult.

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