2017-06-28 4 views
1

J'ai développé une application qui lit l'audio en arrière-plan. Le problème que j'ai est que lorsque l'orientation de l'écran change l'audio s'arrête pendant quelques millisecondes et continue ensuite. Voici le code approprié:Comment puis-je éviter l'arrêt de l'audio (pendant quelques millisecondes) lors de l'orientation de l'écran?

import android.widget.Button; 

public class MainActivity extends AppCompatActivity { 

    private Integer images[]={R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4,R.drawable.pic5, R.drawable.pic6,.... 

    private int currImage=0; 
    MediaPlayer mp; 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt("currImageSaved", currImage); 

     outState.putInt("time", (int)mp.getCurrentPosition()); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 

     int last_pos = savedInstanceState.getInt("time"); 
     mp.seekTo(last_pos); 
     mp.start(); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if (savedInstanceState != null) 
     { 
      currImage = savedInstanceState.getInt("currImageSaved", 0); 
     } 

     mp=MediaPlayer.create(this,R.raw.shlomoimagine); 

     if (getResources().getConfiguration().orientation == 
       Configuration.ORIENTATION_PORTRAIT) { 
      setContentView(R.layout.main_p); 
     } else { 
      setContentView(R.layout.main_l); 
     } 

     initializeImageSwitcher(); 
     setInitialImage(); 
     setImageRotateListener(); 
    } 


    @Override 
    protected void onPause() { 
     super.onPause(); 
     mp.pause(); 

    } 

    private void initializeImageSwitcher(){..... 
    ......} 

    private void setImageRotateListener() {...... 
    ....} 

    private void setInitialImage() {.... 
    ....} 

    private void setCurrentImage() {.... 
    ...} 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     mp.start(); 

    } 
    ... 
} 
+0

Hey! Avez-vous vérifié ce ? –

+0

Merci, mais je ne comprends pas où ajouter l'instruction if (mp! = Null && .... –

+0

Devrais-je supprimer le onRestoreInstanceState qui gère le mp? Et le onSaveInstanceState également? –

Répondre

0

Vous pouvez utiliser Service pour lire de la musique en arrière-plan. Il ne sera pas recréé après un changement d'orientation. Ou vous pouvez ajouter

android:configChanges="orientation|screenSize|keyboardHidden" 

dans votre fichier manifest.xml pour empêcher la récréation d'activité lorsque l'orientation change. Mais cette fois, vous devez gonfler manuellement la nouvelle disposition à l'intérieur de la méthode onConfigurationChanged.

+0

J'ai passé quelques heures pour mettre en œuvre le service pour le lecteur multimédia, l'audio en effet jouait continuellement lorsque l'écran était orienté mais il y a deux problèmes qui ne peuvent être ignorés: d'abord, l'audio ne s'arrêtait pas lorsque l'application était terminée et l'autre problème était que lorsque j'utilisais une autre application alors que J'ai développé mon application pour arrêter de jouer en changeant d'application et continuer à jouer à partir du même point où elle a été arrêtée arrière. Cela fonctionne très bien ... Mais encore, le problème est l'arrêt audio temporaire court. –

+0

Y a-t-il du retard dans le démarrage de la musique ou l'arrêt de la musique? Je n'ai pas compris le problème – ekilic

+0

Le problème est que lorsque l'orientation de l'écran se produit la musique s'arrête pendant une courte période de temps, puis continuez. Je ne sais pas pourquoi et je veux jouer continuellement à l'écran sans l'arrêt ennuyeux. –