2013-07-06 4 views
0

J'utilise une activité de tabulation où il y a plusieurs listes de lecture de chansons..Alors que je joue une chanson d'une liste de lecture et la déplace vers une autre, les deux chansons commencent à jouer simultanément.Maintenant, je veux arrêter la musique de mon activité précédente chaque fois que je sélectionne une chanson de ma nouvelle activité en utilisant le gestionnaire audio uniquement sans utiliser de services.Alors quelqu'un peut-il m'aider ou me donner quelques indications à ce sujet?Mettre en pause un média en utilisant le gestionnaire audio

Code: -

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(); 

    } 
} 

Une autre activité

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(); 
    } 



} 

Répondre

1

Regardez dans ceci: http://developer.android.com/training/managing-audio/audio-focus.html vous serait Fondamentalement demander mise au point audio et l'autre activité écouterait quand il perd le focus audio. C'est la bonne solution car cela signifie également que si l'utilisateur ouvre un lecteur de musique, votre application cessera de jouer.

+0

J'ai essayé, voir ma question mise à jour, mais je reçois encore plusieurs chansons en cours de lecture. –

+0

avez-vous implémenté un onAudioFocusChangeListener? –

+0

Oui, je l'ai implémenté. –

Questions connexes