2013-08-23 3 views
0

Я занимаюсь разработкой приложения для музыкального плеера, и он отлично воспроизводит музыку, но проблема возникает, когда она играет в фоновом режиме, она прекращается через некоторое время ... Я искал ее в сети, чтобы решить эту проблему , почти все они использовали службу вместо активности, и я не хочу этого делать, так как я могу это достичь?Музыка перестает играть в фоновом режиме. Я не хочу использовать ее как услугу. Каковы мои альтернативы?

Вот код, я использую

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

потому что затруднит мой код ... как многие методы не поддерживаются в процессе эксплуатации, таких как setContentView() и т. д. Знаете ли вы какие-либо другие альтернативы? –

+0

FALSE !! ваше приложение будет более безопасным, музыкальный плеер должен всегда управляться службой ForeGround с уведомлением, чтобы остановить его. И обслуживание не так сложно использовать. Извините, но это путь;/ –

+0

@ Yume117, но как работают обычные (профессиональные) музыкальные проигрыватели? Кажется, они похожи на действия .. с правильным пользовательским интерфейсом и всеми –

ответ

2

Вы должны использовать foreground Service для этого. Вероятность того, что фоновая активность или фоновая служба будет убита Android, очень высока. Это проблема, которую вы наблюдаете.

+0

Могу ли я использовать setContentView() в этом вид обслуживания? –

+0

Нет. В сервисе нет пользовательского интерфейса. Но вы можете публиковать уведомление с воспроизведением, паузой, воспроизведением заголовка и т. Д. Для пользователя. Пользователь сможет видеть текст и даже нажимать кнопки. Проверьте это http://developer.android.com/guide/topics/ui/notifiers/notifications.html –

+0

, но как работают обычные (профессиональные) музыкальные проигрыватели? Кажется, они похожи на действия .. с правильным пользовательским интерфейсом и все –

1

я столкнулся с той же проблемой и то, что я сделал, чтобы установить службу на передний план в службе OnCreate метод

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

Извините, что я noob, не могли бы вы рассказать подробнее? –

+0

Могу ли я использовать его в своей деятельности? Или я должен преобразовать его в serivice? –

+0

Вы не можете долго работать. Андроид os очистит его после того, как он перейдет на задний план. – wakaka