码迷,mamicode.com
首页 > 其他好文 > 详细

【项目】音乐播放器

时间:2016-04-18 23:59:20      阅读:368      评论:0      收藏:0      [点我收藏+]

标签:

效果图:

技术分享

先完成布局和播放功能

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <SeekBar
        android:id="@+id/seekbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:paddingBottom="30dp" />

    <LinearLayout
        android:id="@+id/layout_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/seekbar"
        android:orientation="horizontal">

        <Button
            android:id="@+id/up"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:onClick="up"
            android:text="上一首" />

        <Button
            android:id="@+id/play"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:onClick="play"
            android:text="播放" />

        <Button
            android:id="@+id/next"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:onClick="next"
            android:text="下一首" />
    </LinearLayout>
</RelativeLayout>
public class SdcardUtils {
    public static boolean isMounted(){
        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
    }

    public static String getPath(){
        if(isMounted()){
            return Environment.getExternalStorageDirectory().getAbsolutePath();
        }else{
            return null;
        }
    }

    public static void getAllMp3File(String filePath,List<String> list){
        File file = new File(filePath);
        File[] files = file.listFiles();
        for(int i = 0;i<files.length;i++){
            File subFile = files[i];
            if(subFile.isDirectory()){
                getAllMp3File(subFile.getAbsolutePath(),list);
            }else{
                if(subFile.getName().endsWith(".mp3")){
                    list.add(subFile.getAbsolutePath());
                }
            }
        }
    }
}
public class MusicService extends Service {

    class MyBinder extends Binder {
        public MusicService getService(){
            return MusicService.this;
        }
    }

    private MediaPlayer mediaPlayer;
    @Override
    public IBinder onBind(Intent intent) {
        MyBinder binder = new MyBinder();
        return binder;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mediaPlayer = new MediaPlayer();
        try {
            mediaPlayer.setDataSource(Environment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_MUSIC+"/a.mp3");
            mediaPlayer.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mediaPlayer.release();
    }

    public void servicePlay(){
        if(mediaPlayer.isPlaying()){
            mediaPlayer.pause();
        }else{
            mediaPlayer.start();
        }
    }

    public void serviceChangeMusic(String musicPath){
        mediaPlayer.reset();
        try {
            mediaPlayer.setDataSource(musicPath);
            mediaPlayer.prepare();
            mediaPlayer.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public class MainActivity extends AppCompatActivity {

    private SeekBar seekBar;
    private Intent intent;
    private MusicServiceConnection musicServiceConnection;
    private MusicService musicService;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        seekBar = (SeekBar) findViewById(R.id.seekbar);
        intent = new Intent(this,MusicService.class);
        musicServiceConnection = new MusicServiceConnection();
        bindService(intent,musicServiceConnection,BIND_AUTO_CREATE);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(musicServiceConnection);
    }

    class MusicServiceConnection implements ServiceConnection{

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            MusicService.MyBinder myBinder = (MusicService.MyBinder) service;
            musicService = myBinder.getService();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    }

    public void play(View view){
        musicService.servicePlay();
    }

    public void up(View view){

    }

    public void next(View view){

    }
}

第二步:实现上一首、下一首和完善播放键

优化MusicService类的onCreate方法和MainActivity类的play/up/next方法

 @Override
    public void onCreate() {
        super.onCreate();
        mediaPlayer = new MediaPlayer();
    }
public void play(View view){
        if(isFirst){    //判断是不是第一次点击播放键
            musicService.serviceChangeMusic(musicList.get(current_position));
            play.setText("暂停");
            isFirst = false;
        }else{
            String musicState = play.getText().toString();
            play.setText("播放".equals(musicState)?"暂停":"播放");
            musicService.servicePlay();
        }
    }

    public void up(View view){
        current_position --;
        if(current_position<0){
            current_position = musicList.size()-1;
        }
        musicService.serviceChangeMusic(musicList.get(current_position));
        play.setText("暂停");
    }

    public void next(View view){
        current_position++;
        if(current_position>=musicList.size()){
            current_position = 0;
        }
        musicService.serviceChangeMusic(musicList.get(current_position));
        play.setText("暂停");
    }

 

【项目】音乐播放器

标签:

原文地址:http://www.cnblogs.com/anni-qianqian/p/5406150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!