2016-05-05 2 views
0

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

Что я хочу:

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

Так что мой вопрос является (на основе моих верхних заданных требований)

  1. Можно ли играть два звука таким образом, что они на самом деле не беспокоить другие звук?

  2. Что подходит для этого?

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

Если у вас есть какой-либо код и идея, пожалуйста, поделитесь мной. Любая ссылка будет оценена по достоинству. Заранее спасибо.

ответ

2

Вы можете использовать Service с классом MediaPlayer

Service -

import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnErrorListener; 
import android.os.Binder; 
import android.os.IBinder; 
import android.widget.Toast; 

public class MusicService extends Service implements MediaPlayer.OnErrorListener{ 

    private final IBinder mBinder = new ServiceBinder(); 
    MediaPlayer mPlayer; 
    private int length = 0; 

    public MusicService() { } 

    public class ServiceBinder extends Binder { 
     MusicService getService() 
     { 
      return MusicService.this; 
     } 
    } 

    @Override 
    public IBinder onBind(Intent arg0){return mBinder;} 

    @Override 
    public void onCreate(){ 
     super.onCreate(); 

     Player = MediaPlayer.create(this, R.raw.jingle); 
     mPlayer.setOnErrorListener(this); 

     if(mPlayer!= null) 
     { 
      mPlayer.setLooping(true); 
      mPlayer.setVolume(100,100); 
     } 


     mPlayer.setOnErrorListener(new OnErrorListener() { 

     public boolean onError(MediaPlayer mp, int what, int 
      extra){ 

      onError(mPlayer, what, extra); 
      return true; 
     } 
      }); 
    } 

    @Override 
    public int onStartCommand (Intent intent, int flags, int startId) 
    { 
     mPlayer.start(); 
     return START_STICKY; 
    } 

    public void pauseMusic() 
    { 
     if(mPlayer.isPlaying()) 
     { 
      mPlayer.pause(); 
      length=mPlayer.getCurrentPosition(); 

     } 
    } 

    public void resumeMusic() 
    { 
     if(mPlayer.isPlaying()==false) 
     { 
      mPlayer.seekTo(length); 
      mPlayer.start(); 
     } 
    } 

    public void stopMusic() 
    { 
     mPlayer.stop(); 
     mPlayer.release(); 
     mPlayer = null; 
    } 

    @Override 
    public void onDestroy() 
    { 
     super.onDestroy(); 
     if(mPlayer != null) 
     { 
     try{ 
     mPlayer.stop(); 
     mPlayer.release(); 
      }finally { 
       mPlayer = null; 
      } 
     } 
    } 

    public boolean onError(MediaPlayer mp, int what, int extra) { 

     Toast.makeText(this, "music player failed", Toast.LENGTH_SHORT).show(); 
     if(mPlayer != null) 
     { 
      try{ 
       mPlayer.stop(); 
       mPlayer.release(); 
      }finally { 
       mPlayer = null; 
      } 
     } 
     return false; 
    } 
} 

В вашем использовании Activity класса ServiceConnection

private boolean mIsBound = false; 
private MusicService mServ; 
private ServiceConnection Scon =new ServiceConnection(){ 

    public void onServiceConnected(ComponentName name, IBinder 
    binder) { 
    mServ = ((MusicService.ServiceBinderbinder).getService(); 
    } 

    public void onServiceDisconnected(ComponentName name) { 
     mServ = null; 
    } 
    }; 

    void doBindService(){ 
     bindService(new Intent(this,MusicService.class), 
       Scon,Context.BIND_AUTO_CREATE); 
     mIsBound = true; 
    } 

    void doUnbindService() 
    { 
     if(mIsBound) 
     { 
      unbindService(Scon); 
      mIsBound = false; 
     } 
    } 
} 

Запуск, приостановка, возобновление и остановка музыки

Следуйте инструкции

  1. Сначала свяжите службу к деятельности по телефону doBindService на вашу деятельность, как-х onCreate пропускания намерения службы.
  2. Запустите службу явным Intent: Intent music = new Intent(); music.setClass(this,MusicService.class); startService(music);
  3. От вашей деятельности, где вы хотите, чтобы приостановить, возобновить или остановить музыку, вызвать соответствующие сервисные функции следующим образом: mServ.pauseMusic(); mServ.resumeMusic(); mServ.stopMusic();
  4. Не забудьте позвонить doUnbindService из мест, где вы хотите отвязать услугу от активности. Идеальное место - вызов метода активности onDestroy().
  5. В AndroidManifest файл приложения, вставьте следующий код XML:

"service android:name="MusicService" android:enabled="true"

Я надеюсь, что это поможет вам.

+0

отлично, так что это продолжало бы играть на службе, а затем с помощью кнопки я могу создать локальный медиаплеер и воспроизвести звук? Это так ? –

+0

Хм, но вам нужно будет сделать виджет, если вы хотите, чтобы все было сделано извне, а не из активности. ИЛИ вы также можете сделать это в панели уведомлений. Это все о том, как вам нужно выполнить свой код. –

+0

нет, вы не получили мою вторую идею. Все, что я имею в виду, хочу, чтобы фоновая музыка продолжала играть, и при нажатии кнопки на кнопке можно щелкнуть по новой звуковой пьесе, то есть «Вы нажали следующую кнопку», поэтому я хочу воспроизвести этот звук при нажатии кнопки, сохраняя при этом фоновую музыку играя –

Смежные вопросы