2013-07-06 24 views
0

我正在使用選項卡活動,其中有多個歌曲播放列表。因此,無論何時從一個播放列表播放歌曲並移動到另一個播放列表,這兩個歌曲都會同時播放。現在我想要的是每當我使用音頻管理器僅從我的新活動中選擇任何歌曲而不使用任何服務時,就停止從以前的活動中播放音樂。因此,有人可以幫助我或向我提供一些指導嗎?使用音頻管理器暫停媒體

代碼: -

public class AllSongs extends ListActivity implements AudioManager.OnAudioFocusChangeListener{ 

private Cursor musiccursor; 
int music_column_index; 
int songPosition; 
int ResumePosition=0; 
MediaPlayer mMediaPlayer; 
String filen,filename; 
ImageView imageView; 
ListAdapter adapter; 
int count,index,top; 
ListView lv; 
Parcelable state; 
View v; 
AudioManager am; 
int result; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState) 
    am = (AudioManager) getSystemService(AUDIO_SERVICE); 
    result=am.requestAudioFocus(this,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN); 
    //Creating list of songs using MediaStore 
mMediaPlayer=new MediaPlayer(); 
    } 

@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 

    if(result!=AudioManager.AUDIOFOCUS_REQUEST_GRANTED){ 
     Toast.makeText(getApplicationContext(), "Request not Granted", Toast.LENGTH_LONG).show(); 
    } 
    else{ 
      mMediaPlayer.reset(); 
      musiccursor.moveToPosition(position); 
      filename = musiccursor.getString(music_column_index); 
      mMediaPlayer.setDataSource(filename); 
     mMediaPlayer.prepare(); 
     mMediaPlayer.start(); 
     } 


@Override 
public void onAudioFocusChange(int focusChange) { 
    // TODO Auto-generated method stub 
    Log.d("In AudioManager", "adajdjdasdjsd"); 
    if(focusChange==AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK){ 
    mMediaPlayer.stop(); 
    mMediaPlayer.release(); 
    } 
    else{ 
     mMediaPlayer.stop(); 

    } 
} 

另一個活動

public class Artists extends ListActivity implements OnAudioFocusChangeListener{ 

    setContentView(R.layout.artists); 


    manager = (AudioManager) getSystemService(AUDIO_SERVICE); 
    result=manager.requestAudioFocus(this,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN); 


@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
f(result!=AudioManager.AUDIOFOCUS_REQUEST_GRANTED){ 
     Toast.makeText(getApplicationContext(), "Request not Granted", Toast.LENGTH_LONG).show(); 
    } 
    else{ 
      mMediaPlayer.reset(); 
      musiccursor.moveToPosition(position); 
      filename = musiccursor.getString(music_column_index); 
      mMediaPlayer.setDataSource(filename); 
     mMediaPlayer.prepare(); 
     mMediaPlayer.start(); 
     } 
     } 


@Override 
public void onAudioFocusChange(int focusChange) { 
    // TODO Auto-generated method stub 
    if(focusChange==AudioManager.AUDIOFOCUS_LOSS_TRANSIENT){ 
     mMediaPlayer.stop(); 
     mMediaPlayer.reset(); 
     mMediaPlayer.release(); 
    } 



} 

回答

1

看看這個:http://developer.android.com/training/managing-audio/audio-focus.html基本上,你會要求音頻焦點,然後其他的活動會聽,當它失去音頻焦點。這是正確的解決方案,因爲這也意味着如果用戶打開音樂播放器,您的應用程序將停止播放。

+0

我試過了,看到我更新的問題,但我仍在播放多首歌曲。 –

+0

你有沒有實現一個onAudioFocusChangeListener? –

+0

是的,我已經實現了它。 –