我已经检索了手机上的歌曲,当我点击列表项时,它会切换到下一个活动并播放歌曲。
但是当我回到我的播放列表并再次单击另一首歌曲时,上一首歌曲仍在播放,就像我刚刚单击的歌曲一样。
这是代码Playlist.java
:
package com.example.padyplayer;
import java.io.IOException;
import java.util.ArrayList;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Playlist extends Activity implements OnItemClickListener {
ListView tracks_view;
ArrayList<String> songs;
ArrayAdapter<String> songs_items;
//MediaPlayer mediaplayer;
//AudioManager audiomanager;
Cursor cursor;
Uri uri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_playlist);
tracks_view = (ListView) findViewById(R.id.tracks);
generate_Playlist();
songs_items = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, songs);
//mediaplayer = new MediaPlayer();
//audiomanager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
tracks_view.setAdapter(songs_items);
tracks_view.setOnItemClickListener(this);
}
@SuppressWarnings("deprecation")
private void generate_Playlist() {
// TODO Auto-generated method stub
uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String projection[] = { android.provider.MediaStore.Audio.Media.DATA,
android.provider.MediaStore.Audio.Media.TITLE,
android.provider.MediaStore.Audio.Media.ARTIST,
android.provider.MediaStore.Audio.Media.ALBUM,
android.provider.MediaStore.Audio.Media.DURATION };
cursor=this.managedQuery(uri, projection, null, null, null);
songs=new ArrayList<String>();
while(cursor.moveToNext())
{
songs.add(cursor.getString(1));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.playlist, menu);
return true;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
// TODO Auto-generated method stub
//cursor.moveToPosition(position);
int index1=position;
Intent i=new Intent(getApplicationContext(),Controls.class);
i.putExtra("index", index1);
startActivity(i);
}
}
这是第二节课Controls.java
:
package com.example.padyplayer;
import java.io.IOException;
import java.util.ArrayList;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class Controls extends Activity implements OnClickListener {
TextView song_view,artist_view;
Button play,next,back;
MediaPlayer mediaplayer=new MediaPlayer();
AudioManager audiomanager;
ArrayList<String> songs;
Cursor cursor;
Uri uri;
private int index=0;
//ArrayAdapter<String> song_items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_controls);
play=(Button)findViewById(R.id.play);
next=(Button)findViewById(R.id.next);
back=(Button)findViewById(R.id.back);
play.setOnClickListener(this);
next.setOnClickListener(this);
back.setOnClickListener(this);
//mediaplayer=new MediaPlayer();
audiomanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
getMusic();
Bundle b=getIntent().getExtras();
index = b.getInt("index");
playSong(index);
}
@SuppressWarnings("deprecation")
private void getMusic() {
// TODO Auto-generated method stub
uri=android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String projection[]={android.provider.MediaStore.Audio.Media.DATA,
android.provider.MediaStore.Audio.Media.TITLE,
android.provider.MediaStore.Audio.Media.ARTIST,
android.provider.MediaStore.Audio.Media.ALBUM,
android.provider.MediaStore.Audio.Media.DURATION};
cursor=this.managedQuery(uri, projection, null, null,null);
songs=new ArrayList<String>();
while (cursor.moveToNext()) {
songs.add(cursor.getString(1));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.controls, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.play:
if(mediaplayer.isPlaying())
{
mediaplayer.pause();
play.setText("play");
}
else if(mediaplayer!=null)
{
mediaplayer.start();
play.setText("pause");
}
break;
case R.id.next:
if(index<(songs.size()-1)){
index+=1;
playSong(index);
}
else
{
index=0;
playSong(index);
}
break;
case R.id.back:
if(index>0){
index-=1;
playSong(index);
}
else
{
index=songs.size()-1;
playSong(index);
}
break;
default:
break;
}
//
}
private void playSong(int index2) {
// TODO Auto-generated method stub
cursor.moveToPosition(index2);
int song_id=cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
String song_name=cursor.getString(song_id);
try {
mediaplayer.reset();
mediaplayer.setDataSource(song_name);
mediaplayer.prepare();
mediaplayer.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
自从两天以来,我一直被这个问题困扰。请帮忙。