private List<String> music_list = new ArrayList<String>(); private int currentItem = 0; private static final String MUSIC_PATH = new String("/sdcard/"); private MediaPlayer mplayer = null;
/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id = "@+id/idLastOne"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/last"
/>
<Button
android:id = "@+id/idPause"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/pause"
/>
<Button
android:id = "@+id/idStart"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/start"
/>
<Button
android:id = "@+id/idStop"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/end"
/>
<Button
android:id = "@+id/idNextOne"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/next"
/>
<ListView
android:id = "@+id/idList"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_weight="1"
android:drawSelectorOnTop="false"
/>
</LinearLayout>
还用到了musiclist.xml<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id = "@+id/idTextView"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
/>eclipse不报错,在模拟器上打开此程序出现了那个经典的警告。
这可能会出项冲突,我不知道你为什么一定要用ListActivity呢?代码帮你修改了,使用正常的Activity,用ListView显示SD卡中的音频数据。mail.xml中的布局也重新整理了一下,代码测试过,好用,你看看吧。
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;public class MediaPlayerSdcardActivity extends Activity {
private Button startButton = null;
private Button endButton = null;
private Button pauseButton = null;
private Button lastButton = null;
private Button nextButton = null;
private ListView listView = null;
private List<String> music_list = new ArrayList<String>();
private int currentItem = 0;
private static final String MUSIC_PATH = new String("/sdcard/");
private MediaPlayer mplayer = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mplayer = new MediaPlayer();
startButton = (Button)findViewById(R.id.idStart);
startButton.setOnClickListener(new startButtonListener());
endButton = (Button)findViewById(R.id.idStop);
endButton.setOnClickListener(new endButtonListener());
pauseButton = (Button)findViewById(R.id.idPause);
pauseButton.setOnClickListener(new pauseButtonListener());
lastButton = (Button)findViewById(R.id.idLastOne);
lastButton.setOnClickListener(new lastButtonListener());
nextButton = (Button)findViewById(R.id.idNextOne);
nextButton.setOnClickListener(new nextButtonListener());
listView = (ListView)findViewById(R.id.idList);
musicList();
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
currentItem = arg2;
playMusic(MUSIC_PATH + music_list.get(arg2));
}
});
}
public void playMusic(String path) {
mplayer.reset();
try {
mplayer.setDataSource(path);
} catch (IllegalArgumentException 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();
}
try {
mplayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mplayer.start();
}
public void lastMusic() {
currentItem--;
if (currentItem < 0) {
currentItem = music_list.size()-1;
} else {
playMusic(MUSIC_PATH + music_list.get(currentItem));
}
}
public void nextMusic() {
currentItem++;
if (currentItem >= music_list.size()) {
currentItem = 0;
} else {
playMusic(MUSIC_PATH + music_list.get(currentItem));
}
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
mplayer.stop();
mplayer.release();
MediaPlayerSdcardActivity.this.finish();
return true;
}
return super.onKeyUp(keyCode, event);
} public void musicList() {
File f = new File(MUSIC_PATH);
File[] files = f.listFiles();
for (int i=0; i<files.length; i++) {
File file = files[i];
if(getAudioFile(file.getPath())){
music_list.add(file.getName());
}
}
ArrayAdapter<String> musicList = new ArrayAdapter<String>(MediaPlayerSdcardActivity.this, R.layout.musiclist, music_list);
listView.setAdapter(musicList);
}
public boolean getAudioFile(String fName){
boolean bRet;
String end = fName.substring(fName.lastIndexOf(".")+1, fName.length()).toLowerCase();
if(end.equals("mp3")||end.equals("wav")){ //在这里添加其他类型的Audio数据
bRet = true;
}
else{
bRet = false;
}
return bRet;
}
class MusicFilter implements FilenameFilter {
public boolean accept(File dir, String filename) {
// TODO Auto-generated method stub
return (filename.endsWith(".mp3"));
}
}
class startButtonListener implements OnClickListener {
public void onClick(View v) {
// TODO Auto-generated method stub
if (!mplayer.isPlaying()) {
playMusic(MUSIC_PATH + music_list.get(currentItem));
}
}
}
class endButtonListener implements OnClickListener {
public void onClick(View v) {
// TODO Auto-generated method stub
if (mplayer.isPlaying()) {
mplayer.reset();
}
}
}
class pauseButtonListener implements OnClickListener {
public void onClick(View v) {
// TODO Auto-generated method stub
if (mplayer.isPlaying()) {
mplayer.pause();
}
}
}
class lastButtonListener implements OnClickListener {
public void onClick(View v) {
// TODO Auto-generated method stub
lastMusic();
}
}
class nextButtonListener implements OnClickListener {
public void onClick(View v) {
// TODO Auto-generated method stub
nextMusic();
}
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<Button
android:id = "@+id/idLastOne"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/last"
/>
<Button
android:id = "@+id/idPause"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/pause"
/>
<Button
android:id = "@+id/idStart"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/start"
/>
<Button
android:id = "@+id/idStop"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/end"
/>
<Button
android:id = "@+id/idNextOne"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/next"
/>
</LinearLayout><ListView
android:id = "@+id/idList"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_weight="1"
android:drawSelectorOnTop="false"
/>
</LinearLayout>
亮点,我知道了。
你如果要用listActivity的话,那个listView的Id是定死了的,否则,系统会找不到该ListView。
To do this, your own view MUST contain a ListView object with the id "@android:id/list" (or list if it's in code)