Как отобразить SplashScreen, чтобы сказать, что приложение «загружается»?

Мне нужно показать индикатор выполнения стиля загрузки, я объясняю:

Первое действие, которое запускается, - это заставка, после чего происходит действие, когда класс mplayer автоматически начинает работать с внешним URL-адресом. Бывает, что для появления второго действия требуется переменное время (в зависимости от состояния сети и других условий), и на этом промежутке показывается черный экран. Именно в этот момент я хочу добавить загрузку при получении информации из внешнего URL-адреса класса mplayer.

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.streamingcoop.MainActivity">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/txt_noticias"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NOTICIAS"
        android:textSize="@dimen/abc_action_bar_progress_bar_size" />

</LinearLayout>

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_weight="1"
        android:gravity="center"
        android:paddingLeft="20dp"
        android:paddingRight="20dp">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="vertical">

            <Button
                android:id="@+id/button1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Deportes" />

            <Button
                android:id="@+id/button2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Política" />
        </LinearLayout>

    </TableRow>

    <ProgressBar
        android:id="@+id/mi_loading"
        android:layout_width="748dp"
        android:layout_height="102dp"
        android:indeterminate="false" />

    <TableRow
        android:id="@+id/tableRow2"
        android:layout_weight="1"
        android:gravity="center"
        android:paddingBottom="10dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingTop="20dp">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical"
            android:paddingLeft="20dp">

            <Button
                android:id="@+id/button3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Economía" />

            <Button
                android:id="@+id/button4"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:singleLine="false"
                android:text="Entretención" />

        </LinearLayout>

    </TableRow>
</TableLayout>

<RelativeLayout
    android:id="@+id/reproductor"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:orientation="vertical">

    <ImageButton
        android:id="@+id/stop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@android:drawable/ic_media_pause" />

    <ImageButton
        android:id="@+id/play"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:src="@android:drawable/ic_media_play"
        android:visibility="invisible"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

Я показываю код деятельности, где находится игрок.

public class MainActivity extends Activity implements OnClickListener {
    static MediaPlayer mPlayer;
    ImageButton buttonPlay;
    ImageButton buttonStop;
    String url = "url";
    Button btn_politica, btn_deportes, btn_espectaculo, btn_entretencion;
    ProgressBar progressbar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //setContentView(R.layout.splash);//analiza el archivo XML, traduce a objetos cada componente,
        //le asigna los atributos, establece contenedores y todas las relaciones
        //padre e hijo necesarias.

        progressbar = (ProgressBar) findViewById(R.id.mi_loading);
       // progressbar_splash=(ProgressBar) findViewById(R.id.mi_loading_splash);
        progressbar.setVisibility(View.VISIBLE);

        //Bloque de codigo para el streaming al cargar el activity
        mPlayer = new MediaPlayer();
        mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                progressbar.setVisibility(View.INVISIBLE);
               // progressbar_splash.setVisibility(View.INVISIBLE);
                 //Toast.makeText(getApplicationContext(), "Ya cargó!!", Toast.LENGTH_LONG).show();


            }
        });
        try {
            mPlayer.setDataSource(url);
        } catch (IllegalArgumentException e) {
            Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
        } catch (SecurityException e) {
            Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
        } catch (IllegalStateException e) {
            Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            mPlayer.prepare();

        } catch (IllegalStateException e) {
            Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
        }
        mPlayer.start();
        //Finaliza bloque de codigo para cargar el streaming al inicio de la aplicacion+

        initialize();

        //Bloque de codigo para el streaming al presionar play
        buttonPlay = (ImageButton) findViewById(R.id.play);
        buttonPlay.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                mPlayer = new MediaPlayer();
                mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                    progressbar.setVisibility(View.INVISIBLE);

                      //Toast.makeText(getApplicationContext(), "Cargandooooooo", Toast.LENGTH_LONG).show();

                    }
                });
                try {
                    mPlayer.setDataSource(url);
                } catch (IllegalArgumentException e) {
                    Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
                } catch (SecurityException e) {
                    Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
                } catch (IllegalStateException e) {
                    Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    mPlayer.prepare();
                    // progressbar = (ProgressBar) findViewById(R.id.mi_loading);
                    //progressbar.setVisibility(View.GONE);
                } catch (IllegalStateException e) {
                    Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
                } catch (IOException e) {
                    Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
                }
                mPlayer.start();
                // progressbar.setVisibility(View.INVISIBLE);
                buttonPlay.setVisibility(View.INVISIBLE);
                buttonStop.setVisibility(View.VISIBLE);

            }
        });

        //Bloque de codigo para el streaming al presionar pause
        buttonStop = (ImageButton) findViewById(R.id.stop);
        buttonStop.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                if (mPlayer != null && mPlayer.isPlaying()) {
                    mPlayer.stop();
                    //buttonPlay.setEnabled(true);
                    buttonPlay.setVisibility(View.VISIBLE);
                    buttonStop.setVisibility(View.INVISIBLE);
                   // progressbar.setVisibility(View.INVISIBLE);
                }
            }
        });
    }

    private void initialize() {
        btn_deportes = (Button) findViewById(R.id.button1);
        btn_deportes.setOnClickListener(this);

        btn_politica = (Button) findViewById(R.id.button2);
        btn_politica.setOnClickListener(this);

        btn_espectaculo = (Button) findViewById(R.id.button3);
        btn_espectaculo.setOnClickListener(this);

        btn_entretencion = (Button) findViewById(R.id.button4);
        btn_entretencion.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button1:
                startActivity(new Intent(this, Activity_Noticias_Deportes.class));
                break;
            case R.id.button2:
                startActivity(new Intent(this, Activity_Noticias_Politica.class));
                break;
            case R.id.button3:
                startActivity(new Intent(this, Activity_Noticias_Economia.class));
                break;
            case R.id.button4:
                startActivity(new Intent(this, Activity_Noticias_Entretencion.class));
                break;
        }
    }
    protected void onDestroy() {
        super.onDestroy();
        // TODO Auto-generated method stub
        if (mPlayer != null) {
            mPlayer.release();
            mPlayer = null;
        }
    }
}

Я показываю код первого Activity, открытый класс Splash

Splash extends Activity {private AlertDialog.Builder mBuilderWait; приватная статическая финальная длинная SPLASH_SCREEN_DELAY = 2000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.splash);
   // progressbar = (ProgressBar) findViewById(R.id.mi_loading);
   // lanzarthread();
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            // Start the next activity


            Intent mainIntent = new Intent().setClass(
                    Splash.this, MainActivity.class);
            startActivity(mainIntent);

            // Close the activity so the user won't able to go back this
            // activity pressing Back button
            finish();
        }
    };
    // Simulate a long loading process on application startup.
    Timer timer = new Timer();
    timer.schedule(task, SPLASH_SCREEN_DELAY);
}
private void lanzarthread() {
    Thread timer = new Thread() {
        public void run() {
            try {
                sleep(2000); //se duerme por 2 segundos
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();//muestra error de ejecucion en consola
            } finally {//pase lo que pase debe saltar a la siguiente pantalla.
                Intent intent = new Intent(Splash.this, MainActivity.class); //instanciamos el objeto Intent y lo inicializamos desde splash hasta MainActivity
                startActivity(intent);
            }
        }

    };
    timer.start();
}

}

1
задан 22.03.2016, 23:41
2 ответа

Просто podrГ-схвати добавлять progressBar в твоем Activity, например:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SplashScreenActivity" >

                    <ProgressBar 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true" />

</RelativeLayout>

, и когда ты video/mp3 он будет готов посредством listener setOnPreparedListener(), - невидимый progressBar:

mediaPlayer.setOnPreparedListener(new OnPreparedListener(){

    @Override
        public void onPrepared(MediaPlayer mp) {
            progressBar.setVisibility(View.INVISIBLE); // esconde el progressBar.
        }
    });

В случае твоего примера ты создаешь несколько инстанций MediaPlayer, что неправильное, можешь считать одинокой инстанцию в течение жизни активности, ему кажутся этими пример :

  progressbar.setVisibility(View.VISIBLE);

            try {
                //Bloque de codigo para el streaming al cargar el activity
                mPlayer = new MediaPlayer();
                mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mPlayer.setDataSource(url);
                mPlayer.prepare();
            } catch (IOException e) {
                Log.e("ERROR",e.getMessage());
                Toast.makeText(getApplicationContext(), "Ocurrio un ERROR!!", Toast.LENGTH_LONG).show();
            }

            mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    progressbar.setVisibility(View.INVISIBLE);
                    Toast.makeText(getApplicationContext(), "Ya cargó!!", Toast.LENGTH_LONG).show();
                    progressbar.setVisibility(View.INVISIBLE);
                    mPlayer.start();
                }
            });

Это serГ - в тебя cГіdigo исправленный:

public class VideoActivity extends Activity implements View.OnClickListener {

        static MediaPlayer mPlayer;
        ImageButton buttonPlay;
        ImageButton buttonStop;
        String url = "http://programmerguru.com/android-tutorial/wp-content/uploads/2013/04/hosannatelugu.mp3";
        Button btn_politica, btn_deportes, btn_espectaculo, btn_entretencion;
        ProgressBar progressbar;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //setContentView(R.layout.splash);//analiza el archivo XML, traduce a objetos cada componente,
            //le asigna los atributos, establece contenedores y todas las relaciones
            //padre e hijo necesarias.

            progressbar = (ProgressBar) findViewById(R.id.mi_loading);
            // progressbar_splash=(ProgressBar) findViewById(R.id.mi_loading_splash);
            progressbar.setVisibility(View.VISIBLE);

            try {
                //Bloque de codigo para el streaming al cargar el activity
                mPlayer = new MediaPlayer();
                mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mPlayer.setDataSource(url);
                mPlayer.prepare();
            } catch (IOException e) {
                Log.e("ERROR",e.getMessage());
                Toast.makeText(getApplicationContext(), "Ocurrio un ERROR!!", Toast.LENGTH_LONG).show();
            }

            mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    progressbar.setVisibility(View.INVISIBLE);
                    Toast.makeText(getApplicationContext(), "Ya cargó!!", Toast.LENGTH_LONG).show();
                    Log.i("VIDEO", "ProgressBar Invisible!");
                    progressbar.setVisibility(View.INVISIBLE);
                    mPlayer.start();
                }
            });
            //Finaliza bloque de codigo para cargar el streaming al inicio de la aplicacion+
            initialize();
            //Bloque de codigo para el streaming al presionar play
            buttonPlay = (ImageButton) findViewById(R.id.play);
            buttonPlay.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    if (mPlayer != null && !mPlayer.isPlaying()) {
                        try {
                            Log.i("INFO", "ProgressBar Visible! =) ");
                            // Aquí se hace el progressBar visible y cuando                      este preparado el video para reproducción se ejectua onPrepared() que hace el progressBar invisible.
                            progressbar.setVisibility(View.VISIBLE);
                            mPlayer.prepare();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        buttonPlay.setVisibility(View.INVISIBLE);
                        buttonStop.setVisibility(View.VISIBLE);
                    }

                }
            });

            //Bloque de codigo para el streaming al presionar pause
            buttonStop = (ImageButton) findViewById(R.id.stop);
            buttonStop.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {
                    if (mPlayer != null && mPlayer.isPlaying()) {
                        mPlayer.stop();
                        buttonPlay.setVisibility(View.VISIBLE);
                        buttonStop.setVisibility(View.INVISIBLE);
                    }
                }
            });
        }

        private void initialize() {
            btn_deportes = (Button) findViewById(R.id.button1);
            btn_deportes.setOnClickListener(this);

            btn_politica = (Button) findViewById(R.id.button2);
            btn_politica.setOnClickListener(this);

            btn_espectaculo = (Button) findViewById(R.id.button3);
            btn_espectaculo.setOnClickListener(this);

            btn_entretencion = (Button) findViewById(R.id.button4);
            btn_entretencion.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.button1:
                    startActivity(new Intent(this, Activity_Noticias_Deportes.class));
                    break;
                case R.id.button2:
                    startActivity(new Intent(this, Activity_Noticias_Politica.class));
                    break;
                case R.id.button3:
                    startActivity(new Intent(this, Activity_Noticias_Economia.class));
                    break;
                case R.id.button4:
                     startActivity(new Intent(this, Activity_Noticias_Entretencion.class));
                    break;
            }
        }

        protected void onDestroy() {
            super.onDestroy();
            if (mPlayer != null) {
                mPlayer.release();
                mPlayer = null;
            }
        }
    }

Помнит разрешение

 <uses-permission android:name="android.permission.INTERNET"/>

, так как ты загружаешь твой ресурс с Интернета.

1
ответ дан 24.11.2019, 14:42
  • 1
    Спасибо Еленой то, за чем оно последует, состоит в том, что в начальном activity, activity Splash я считаю запрограммированным, что после 2 секунда закрылась и открылась другая, но изюм, который они проходят 2 секунды, закрывается и в и # 250; n он не загружает activity mplayer, потому что est и # 225; загружая url, и это мгновение показывает мне черный экран, оно ах и # 237; где я хочу добавить progressbar или синхронизировать, что закрылся справедливый splash, когда est и # 233; уже нагруженная унифицированный указатель ресурса, понимают? я остаюсь очень внимательным, привет и большое спасибо. – Rodrigo 22.03.2016, 17:47
  • 2
    Podr и # 237; схвати добавлять твой layout активности, которую содержит твой player? – Jorgesys♦ 22.03.2016, 19:00
  • 3
    Елена, sub и # 237; c и # 243; я говорю обновляя мой вопрос. Привет. – Rodrigo 22.03.2016, 19:31
  • 4
    Совершенный, позволь мне проверять и я даю тебе soluci и # 243; n. – Jorgesys♦ 22.03.2016, 19:46
  • 5
    Я издал мой ответ, твоя идея была правильна, будучи приготовлен и инициализировали reproducci и # 243; n progressBar становится невидимым, использует я c и # 243; я говорю исправленный и твой aplicaci и # 243; n оно будет функционировать правильно включая делать паузу и воспроизведение снова. – Jorgesys♦ 22.03.2016, 21:25

То, что ты можешь делать, состоит в том, чтобы создавать Алерт Диалог, чтобы показывать сообщение ожидания используя Thread.

Сначала ты создал бы твой AlertDialog объявляя это вне твоего класса

private AlertDialog.Builder mBuilderWait;

После инициализируя это, важно не оставлять возможность того, чтобы смог быть отмененным Dialog

mBuilderWait = new AlertDialog.Builder(this);

mBuilderWait.setTitle(getString("Titulo del Alert"))
            .setMessage(getString("Tu texto de espera.."))
            .setCancelable(false);

Сейчас ты покажешь AlertDialog до того, как ты инициализировал процесс

mBuilderWait.show();

и когда он закончится

mBuilderWait.dismiss();

Thread - это, чтобы реализовывать изменение в интерфейс в то же время выполнения, это больше, чем что-либо, если есть ошибка.

Пример:

try{

    //Tu codigo de carga con el AlertDialog de espera

}catch(Exception e){

    //En caso de error cambio al dialog en mismo tiempo de ejecucion

    runOnUiThread(new Runnable() {
                    public void run() {
                    mBuilderWait.setTitle(getString("Error"))
                                .setMessage(getString("Error de conexion al servidor"))
                                .setCancelable(false);
                                .setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int id) {
                                            dialog.cancel();
                                        }
                                 });
                mBuilderWait.show();

                }
    });

}

Ссылки:

0
ответ дан 24.11.2019, 14:42
  • 1
    Спасибо Макс, я буду проверять это и прокомментирую тебе, Привет. – Rodrigo 22.03.2016, 17:47
  • 2
    Вот, уже они объясняют, как делать это в stackoverflow.com/questions/14497448/… – Max Sandoval 22.03.2016, 18:19
  • 3
    Спасибо Макс, он у меня не остается в и # 250; n очень ясный то, что реализовывать, и # 237; в это, посылать и # 237; в сообщение пока я происхожу с другим activity?, c и # 243; я говорю, что он ссылается на context, но мы и # 233; cu и # 225; l может быть context. Извинение я начинаюсь с разработкой в Android. – Rodrigo 22.03.2016, 19:26
  • 4
    Мне не удается заставить функционировать то, что ты показываешь мне Макс, мы и # 233; ошибка, которую я совершаю: ( – Rodrigo 22.03.2016, 23:19

Теги

Похожие вопросы