【发布时间】:2017-03-16 15:55:29
【问题描述】:
我正在编写一个音乐播放器,我有 2 个活动:
-
第一个(MainActivity)包含歌曲的 ListView,我设置了一个 OnItemClickListener(在其 onCreate() 方法中),它打开一个名为 PlayerActivity 的新活动,传递已被点击的项目的位置:
public class MainActivity extends AppCompatActivity { Intent intent; ArrayList<String> artistsTitles; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent=new Intent(getApplicationContext(), PlayerActivity.class); artistsTitles=getArtistTitle(); ListView mainList=(ListView) findViewById(R.id.mainList); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, artistsTitles); mainList.setAdapter(adapter); mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { intent.putExtra("currentSong", position); startActivity(intent); } }); } private ArrayList<String> getArtistTitle() { ContentResolver musicResolve = getContentResolver(); String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; String[] projection = { MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE}; Uri uri=android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Cursor cursor = musicResolve.query(uri, projection, selection, null, null); ArrayList<String> arrayList=new ArrayList<String>(); while(cursor.moveToNext()) arrayList.add(cursor.getString(0)+" - "+cursor.getString(1)); return arrayList; } } -
第二个(PlayerActivity)有一个歌曲的字符串路径的ArrayList,并使用MediaPlayer播放具有项目位置的歌曲并使用它访问ArrayList:
public class PlayerActivity extends AppCompatActivity { ArrayList<String> songs; MediaPlayer mediaPlayer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_player); songs=new ArrayList<String>(); songs=getSongs(); String songPath=songs.get(intent.getIntExtra("songID", 0)); mediaPlayer=MediaPlayer.create(getApplicationContext(), Uri.parse(songPath)); try { mediaPlayer.reset(); mediaPlayer.setDataSource(getApplicationContext(), Uri.parse(songPath)); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); } } private ArrayList<String> getSongs() { ContentResolver musicResolve = getContentResolver(); String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; String[] projection = {MediaStore.Audio.Media.DATA}; Uri uri=android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Cursor cursor = musicResolve.query(uri, projection, selection, null, null); ArrayList<String> s = new ArrayList<String>(); while(cursor.moveToNext()) s.add(cursor.getString(0)); return s; } }
它运行良好,但是当我返回到第一个活动 (MainActivity) 然后我点击另一个项目(或同一个项目)时,它会创建另一个 PlayerActivity,因此应用程序同时播放 2 首歌曲.
我怎样才能实现它以便它只创建一个 PlayerActivity?
【问题讨论】:
标签: android android-intent android-activity android-music-player