2016-11-23 90 views
0

當我播放'Soundcloud'或'Saavn'音樂播放應用程序時,我開始自己的應用程序,Saavn或Soundcloud中的音樂仍在後臺播放。需要一種方法來停止使用代碼。怎麼做 ?停止背景音樂播放器服務,如Soundcloud和Saavn使用代碼

我想這一點 -

AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
     String SERVICECMD = "com.android.music.musicservicecommand"; 
     String CMDNAME = "command"; 
     String CMDSTOP = "stop"; 

     if(mAudioManager.isMusicActive()) { 
      Intent i = new Intent(SERVICECMD); 
      i.putExtra(CMDNAME , CMDSTOP); 
      HomeActivity.this.sendBroadcast(i); 
     } 

,但它只有在停止音樂,如果Android的默認音樂播放器在後臺播放,而不是第三方應用程序,如Saavn和的SoundCloud有用。

+2

我認爲這個問題可以幫助你:http://stackoverflow.com/questions/24716455/android-how-to-stop-music-service-of -My-APP-IF-另一-APP-播放音樂 – 0xDEADC0DE

+1

見https://developer.android.com/training/managing-audio/audio-focus.html – F43nd1r

回答

2

的一種可能的解決方案,我在此發現使用AudioManager.requestAudioFocus(...)函數

AudioManager AM =(AudioManager)getSystemService(Context.AUDIO_SERVICE);

代碼示例:

int result = am.requestAudioFocus(focusChangeListener, //Request audio focus for playback 
AudioManager.STREAM_MUSIC, //Use the music stream. 
AudioManager.AUDIOFOCUS_GAIN); //Request permanent focus. 

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
    // other app had stopped playing song now , so u can do u stuff now . 
} 

音頻焦點依次分配給請求它的每個應用程序。這意味着如果另一個應用程序請求音頻焦點,您的將失去它。 通過onAudioFocusChange事件偵聽器在AudioFocus發生變化時通知應用程序。此偵聽器是requestAudioFocus函數中的第一個參數。

此偵聽器應該是這個樣子:

private OnAudioFocusChangeListener focusChangeListener = new OnAudioFocusChangeListener() { 
    public void onAudioFocusChange(int focusChange) { 
     AudioManager am =(AudioManager)getSystemService(Context.AUDIO_SERVICE); 
     switch (focusChange) { 
      case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK): 
       //Lower the volume while ducking (not sure what ducking means really) 
       break; 
      case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) : 
       //TODO: pause audio 
       break; 
      case (AudioManager.AUDIOFOCUS_LOSS) : 
       //TODO: pause audio 
       break; 
      case (AudioManager.AUDIOFOCUS_GAIN): 
       //TODO: Return the volume to normal and resume if paused. 
       break; 
      default: break; //empty on default 
     } 
    } 
}; 
0

我想是不是可以停止另一個應用程序,你可能不知道的ProcessID的服務,您可以停止你的應用程序的服務只有當你知道使用

的Android應用程序的PID。 os.Process.killProcess(processIdKillService)

+0

我不知道如何,但YouTube卻做的。當您通過任何應用在背景中播放任何音樂,然後在YouTube應用中播放YouTube視頻時,背景音樂將停止播放。想知道它怎麼樣。 –

+0

按照文檔(https://developer.android.com/reference/android/os/Process.html),你開始對自己的一個或多個進程這隻作品。這裏不太可能出現這種情況 – 0xDEADC0DE