2013-08-23 4 views
0

Je développe une application de lecteur de musique et joue le bien de la musique, mais le problème vient quand il joue en arrière-plan, il arrête après un certain temps .... J'ai cherché sur le net à la façon de résoudre ce problème , presque tous utilisaient un service au lieu d'activité et je ne veux pas le faire, alors comment puis-je y parvenir ??La musique s'arrête lorsque vous jouez en arrière-plan. Je ne veux pas l'utiliser comme service. Quelles sont mes alternatives?

est ici le code que je suis en utilisant

public class NowPlaying extends Activity implements Serializable { 
    static MediaPlayer mp =new MediaPlayer(); 



    /*SeekBar songProgressBar = (SeekBar) findViewById(R.id.songProgressBar); 
    TextView songCurrentDurationLabel = (TextView) findViewById(R.id.songCurrentDurationLabel); 
    TextView songTotalDurationLabel = (TextView) findViewById(R.id.songTotalDurationLabel); 
    private Handler mHandler = new Handler(); 
    private Utilities utils; 
    */ 

    @SuppressLint("NewApi") 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.now_playing); 
     Intent i = getIntent(); 
     final int position=i.getIntExtra("Data2", 0); 


     final ArrayList<SongDetails> songs = getIntent().getParcelableArrayListExtra("Data1"); 
     SongDetails songDetails = songs.get(position) ; 



     Button bfake=(Button) findViewById(R.id.bFake); 
     LinearLayout LL=(LinearLayout) findViewById(R.id.LL); 
     Button Pause=(Button)findViewById(R.id.bPlayPause); 



















     Playservice(songs,position,0 ); 

     bfake.setOnTouchListener(new OnSwipeTouchListener() 
     { int z=0; 

       public void onSwipeRight() { 
        z=z-1; 
        Playservice(songs,position,z ); 
       } 
       public void onSwipeLeft() { 
       z=z+1;  
        Playservice(songs,position,z ); 
       } 
       public void onSwipeBottom() { 
        mp.stop(); 
       } 
       }); 

      LL.setOnTouchListener(new OnSwipeTouchListener() { 
       public void onSwipeBottom() { 
        mp.stop(); 
       } 
       }); 

      Pause.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) 
      {if(mp.isPlaying()) 
       mp.pause(); 
      else 
       mp.start(); 
      } 
      }); 
    } 
     private void Playservice(ArrayList<SongDetails> songs, int position, int i ) 

     { 


      /* Utilities utils = new Utilities(); 
      songProgressBar.setOnSeekBarChangeListener((OnSeekBarChangeListener) this); // Important 
      *///mp.setOnCompletionListener((OnCompletionListener) this); 
      try { 
       String ab=songs.get(position+i).getPath2().toString(); 
        if(mp.isPlaying()) 
        { mp.stop(); 
         } 
        mp.reset(); 
        mp.setDataSource(ab) ; 
        mp.prepare(); 
        mp.start(); 
       } catch (IllegalArgumentException e) { 

        e.printStackTrace(); 
       } catch (SecurityException e) { 

        e.printStackTrace(); 
       } catch (IllegalStateException e) { 

        e.printStackTrace(); 
       } catch (IOException e) { 

        e.printStackTrace(); 
       } 
+0

parce que cela va compliquer mon code ... autant de méthodes ne sont pas pris en charge dans un service tel que setContentView() etc ... connaissez-vous d'autres alternatives? –

+0

FAUX !! votre application sera plus sûre, un lecteur de musique devrait toujours être géré par un service ForeGround avec une notification pour l'arrêter. Et le service n'est pas si compliqué à utiliser. Désolé, mais il est le chemin à parcourir;/​​ –

+0

@ Yume117 mais comment normale de travail du lecteur de musique (les professionnels les) ?? ils semblent être comme les activités interface utilisateur adéquate ..avec et tous –

Répondre

2

Vous devez utiliser un foreground Service pour cela. La probabilité qu'une activité d'arrière-plan ou un service d'arrière-plan soit tué par Android est très élevée. C'est le problème que vous observez.

+0

puis-je utiliser setContentView() dans ce type de service? –

+0

Non. Il n'y a pas d'interface utilisateur dans un service. Mais vous pouvez poster une notification avec lecture, pause, lecture de titre, etc. contrôles pour un utilisateur. L'utilisateur pourra voir le texte et même appuyer sur les boutons. Découvrez ce http://developer.android.com/guide/topics/ui/notifiers/notifications.html –

+0

mais comment faire la normale (les professionnels) lecteur de musique travail ?? ils semblent être comme les activités ..avec UI appropriée et tous –

1

J'ai fait face au même problème et ce que je faisais était de mettre le service au premier plan en service OnCreate méthode

startForeground(R.string.app_name, aNotification); 
+0

désolé je suis noob, pouvez-vous élaborer s'il vous plaît? –

+0

Puis-je l'utiliser dans mon activité? Ou dois-je le convertir en serivice? –

+0

Vous ne pouvez pas avoir une activité de longue durée. L'os android va l'effacer après il va à l'arrière-plan. – wakaka

Questions connexes