基于Android音乐播放器源代码(正常播放、有列表)

基于Android音乐播放器源代码(正常播放、有列表),第1张

package my.android.players

import java.io.File

import java.io.FilenameFilter

import java.util.ArrayList

import java.util.List

import android.app.Activity

import android.app.AlertDialog

import android.content.DialogInterface

import android.content.Intent

import android.media.MediaPlayer

import android.os.Bundle

import android.view.KeyEvent

import android.view.View

import android.view.View.OnClickListener

import android.widget.ImageButton

import android.widget.TextView

public class mainActivity extends Activity {

private List<String>myMusicList=new ArrayList<String>()

//当前播放歌曲的索引

private int currentListItem=0

//音乐的路径

private static final String MUSIC_PATH="/sdcard/mp3"

//播放对象

private MediaPlayer myMediaPlayer

private TextView m_TextView

//播放按钮

private ImageButton m_start

private ImageButton m_stop

private ImageButton m_next

private ImageButton m_last

/*设定bIsPaused一开始为false */

private boolean bIsRun = false

private boolean isplay

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState)

setContentView(R.layout.main2)

myMediaPlayer=new MediaPlayer()

musicList()

m_TextView=(TextView)findViewById(R.id.mtextview)

m_start=(ImageButton)findViewById(R.id.imgbtn_start)

m_stop=(ImageButton)findViewById(R.id.imgbtn_stop)

m_next=(ImageButton)findViewById(R.id.imgbtn_next)

m_last=(ImageButton)findViewById(R.id.imgbtn_last)

listener()

Intent intent = this.getIntent()

Bundle bundle = intent.getExtras()

currentListItem = bundle.getInt("currentListItem")

isplay=bundle.getBoolean("isplay")

if(isplay==true)

{

bIsRun=false

playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem))

}

}

//监听事件

void listener(){

//开始

m_start.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

try

{

if(myMediaPlayer.isPlaying()==true)

{

myMediaPlayer.pause()

m_start.setImageResource(R.drawable.pause)

}

else

{

playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem))

}

}

catch (IllegalStateException e)

{

// TODO Auto-generated catch block

e.printStackTrace()

}

}

})

//下一首

m_next.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

nextMusic()

}

})

//上一首

m_last.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

lastMusic()

}

})

//停止

m_stop.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

stopMusic()

}

})

myMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

@Override

public void onCompletion(MediaPlayer mp) {

// TODO Auto-generated method stub

nextMusic()

}

})

}

//播放音乐

void playMusic(String path){

try {

if(bIsRun==false)

{

myMediaPlayer.reset()

myMediaPlayer.setDataSource(path)

myMediaPlayer.prepare()

myMediaPlayer.start()

/*

* 取出歌曲名的.mp3后缀

* */

String str=(myMusicList.get(currentListItem)).toString()

System.out.println(str)

String str1[]=str.split("\\.")

System.out.println(str1[0])

m_TextView.setText(str1[0])

}

else

{

myMediaPlayer.start()

}

m_start.setImageResource(R.drawable.start)

bIsRun=true

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace()

}

}

//下一首

void nextMusic(){

if(++currentListItem>=myMusicList.size()){

currentListItem=0

}

bIsRun=false

playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem))

}

//上一首

void lastMusic(){

if(--currentListItem<0)

currentListItem=myMusicList.size()-1

bIsRun=false

playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem))

}

//停止

void stopMusic() {

if (myMediaPlayer.isPlaying()) {

m_start.setImageResource(R.drawable.pause)

myMediaPlayer.stop()// 停止

bIsRun=false

}

else

playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem))

}

//当用户返回时结束音乐并释放音乐对象

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

if(keyCode==KeyEvent.KEYCODE_BACK){

new AlertDialog.Builder(mainActivity.this).setTitle("message")

.setIcon(android.R.drawable.dialog_frame)

.setMessage("你确定要离开吗?")

.setPositiveButton("确定",new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

myMediaPlayer.stop()

myMediaPlayer.release()

finish()

}

}).setNegativeButton("取消",new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

}

}).show()

}

return super.onKeyDown(keyCode, event)

}

/**

* 文件过滤器

*

* @author

*

*/

class MusicFilter implements FilenameFilter {

@Override

public boolean accept(File dir, String filename) {

return (filename.endsWith(".mp3"))

}

}

//绑定音乐

void musicList(){

try{

File home=new File(MUSIC_PATH)

if(!home.exists())

home.mkdirs()

if(home.listFiles(new MusicFilter()).length>=0){

for(File file:home.listFiles(new MusicFilter())){

myMusicList.add(file.getName().toString())

}

}

}

catch(Exception ex)

{

ex.printStackTrace()

}

}

}

package my.android.players

import java.io.File

import java.io.FilenameFilter

import java.util.ArrayList

import java.util.List

import android.app.Activity

import android.content.Intent

import android.os.Bundle

import android.view.View

import android.widget.AdapterView

import android.widget.ArrayAdapter

import android.widget.ListView

public class Activity01 extends Activity {

//播放列表

private List<String>myMusicList=new ArrayList<String>()

//当前播放歌曲的索引

private int currentListItem

//音乐的路径

private static final String MUSIC_PATH="/sdcard/mp3"

//播放列表

private ListView m_ListView

private boolean isplay=true

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState)

setContentView(R.layout.main)

m_ListView=(ListView)findViewById(R.id.lv_music)

musicList()

//当选择列表项时播放音乐

m_ListView.setOnItemClickListener(new ListView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?>arg0, View arg1, int arg2,

long arg3) {

currentListItem = arg2

Intent intent = new Intent()

Bundle mBundle=new Bundle()

mBundle.putInt("currentListItem", currentListItem)

mBundle.putBoolean("isplay", isplay)

intent.putExtras(mBundle)

intent.setClass(Activity01.this,mainActivity.class)

startActivity(intent)

finish()

}

})

}

/**

* 文件过滤器

*

* @author

*

*/

class MusicFilter implements FilenameFilter {

@Override

public boolean accept(File dir, String filename) {

return (filename.endsWith(".mp3"))

}

}

//绑定音乐

void musicList(){

try{

File home=new File(MUSIC_PATH)

if(!home.exists())

home.mkdirs()

if(home.listFiles(new MusicFilter()).length>=0){

for(File file:home.listFiles(new MusicFilter())){

myMusicList.add(file.getName().toString())

}

ArrayAdapter<String>musicList=new ArrayAdapter<String>

(Activity01.this,android.R.layout.simple_list_item_1, myMusicList)

m_ListView.setAdapter(musicList)

}

}

catch(Exception ex)

{

ex.printStackTrace()

}

}

}

删除也就从你的列表中拿到指定歌曲的position 然后从数据源中移除 新建播放列表的话你可以重新new一个List 将你要放到新建播放列表中的歌曲的地址add进去不就行了么?

下面这个例子是使用service和broadcastReceiver实现的简单音乐播放器,麻雀虽小,五脏俱全,百度搜索安卓无忧,点击源码看源码,你看演示:

MusiceService代码

package mm.shandong.com.testsimplemedia.service  

import android.app.Service  

import android.content.BroadcastReceiver  

import android.content.Context  

import android.content.Intent  

import android.content.IntentFilter  

import android.content.res.AssetFileDescriptor  

import android.content.res.AssetManager  

import android.media.MediaPlayer  

import android.os.IBinder  

  

public class MusicService extends Service {  

  

    int currentMusic = 0//0表示没有音乐播放,1表示暂停,2表示正在播放,  

    int status  

    MediaPlayer mp  

    String[] musics = new String[]{"first.mp3", "second.mp3", "third.mp3"}  

    AssetManager am  

  

    public MusicService() {  

  

    }  

  

    @Override  

    public void onCreate() {  

        am = getAssets()  

        mp = new MediaPlayer()  

  

        mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {  

            @Override  

            public void onCompletion(MediaPlayer mediaPlayer) {  

                currentMusic++  

                currentMusic = currentMusic % musics.length  

                playMusic()  

                status = 2  

                Intent intentTemp = new Intent("Update_Music_State")  

                intentTemp.putExtra("status", status)  

                intentTemp.putExtra("currentMusic", currentMusic)  

                sendBroadcast(intentTemp)  

  

            }  

        })  

        IntentFilter intentFilter = new IntentFilter()  

        intentFilter.addAction("Get_Music_Control")  

        ///动态注册播放器变化的广播接收者  

        MusicServiceReceiver musicServiceReceiver = new MusicServiceReceiver()  

        registerReceiver(musicServiceReceiver, intentFilter)  

        super.onCreate()  

  

    }  

  

    public class MusicServiceReceiver extends BroadcastReceiver {  

  

        @Override  

        public void onReceive(Context context, Intent intent) {  

            int control = intent.getIntExtra("control", 0)  

            switch (control) {  

                case 0:  

                    //暂停  

                    if (status == 2) {  

                        mp.pause()  

                        status = 1  

                    }  

  

                    break  

                case 1:  

                    ///播放  

                    if (status == 0) {  

                        playMusic()  

                        status = 2  

                    } else if (status == 1) {  

                        mp.start()  

                        status = 2  

                    }  

                    break  

                case 3:  

                    break  

                case 4:  

                    //上一首  

                    if (status == 0) {  

                        if (currentMusic == 0) {  

                            currentMusic = 2  

                        } else {  

                            currentMusic--  

                        }  

                    } else if (status == 1) {  

                        if (currentMusic == 0) {  

                            currentMusic = 2  

                        } else {  

                            currentMusic--  

                        }  

                        status = 0  

  

                    } else if (status == 2) {  

                        if (currentMusic == 0) {  

                            currentMusic = 2  

                        } else {  

                            currentMusic--  

                        }  

                        playMusic()  

                    }  

                    break  

                case 5:  

                    //下一首  

                    if (status == 0) {  

                        if (currentMusic == 2) {  

                            currentMusic = 0  

                        } else {  

                            currentMusic++  

                        }  

                    } else if (status == 1) {  

                        if (currentMusic == 2) {  

                            currentMusic = 0  

                        } else {  

                            currentMusic++  

                        }  

                        status = 0  

  

                    } else if (status == 2) {  

                        if (currentMusic == 2) {  

                            currentMusic = 0  

                        } else {  

                            currentMusic++  

                        }  

                        playMusic()  

                    }  

  

                    break  

            }  

            Intent intentTemp = new Intent("Update_Music_State")  

            intentTemp.putExtra("status", status)  

            intentTemp.putExtra("currentMusic", currentMusic)  

            sendBroadcast(intentTemp)  

  

        }  

    }  

  

    @Override  

    public IBinder onBind(Intent intent) {  

        // TODO: Return the communication channel to the service.  

        throw new UnsupportedOperationException("Not yet implemented")  

    }  

  

    public void playMusic() {  

        try {  

  

            AssetFileDescriptor ad = am.openFd(musics[currentMusic])  

            mp.reset()  

            mp.setDataSource(ad.getFileDescriptor(), ad.getStartOffset(), ad.getLength())  

            //  mp.create(this,musics[currentMusic])  

            mp.prepare()  

            mp.start()  

        } catch (Exception e) {  

            e.printStackTrace()  

        }  

    }  

}

activity代码:

package mm.shandong.com.testsimplemedia  

import android.content.BroadcastReceiver  

import android.content.Context  

import android.content.Intent  

import android.content.IntentFilter  

import android.support.v7.app.AppCompatActivity  

import android.os.Bundle  

import android.view.View  

import android.widget.ImageButton  

import android.widget.TextView  

  

import mm.shandong.com.testsimplemedia.service.MusicService  

  

public class TestSimpleMediaActivity extends AppCompatActivity {  

    ImageButton imageButton  

    TextView textViewMp3Name  

    TextView textViewMp3Author  

    int status = 0  

    String[] authors = new String[]{"张三", "李四", "王二"}  

    String[] names = new String[]{"first", "second", "thrid"}  

    int currentMusic = 0  

  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState)  

        setContentView(R.layout.activity_test_simple_media)  

        imageButton = (ImageButton) findViewById(R.id.imageButton)  

        textViewMp3Name = (TextView) findViewById(R.id.textViewMp3Name)  

        textViewMp3Author = (TextView) findViewById(R.id.textViewMp3Author)  

        imageButton.setOnClickListener(new View.OnClickListener() {  

            @Override  

            public void onClick(View view) {  

                Intent intent = new Intent("Get_Music_Control")  

  

                if (status == 2) {  

                    intent.putExtra("control", 0)  

  

                } else {  

                    intent.putExtra("control", 1)  

                }  

                sendBroadcast(intent)  

            }  

        })  

        IntentFilter intentFilter = new IntentFilter()  

        intentFilter.addAction("Update_Music_State")  

        MusicStatusReceiver musicStatusReceiver = new MusicStatusReceiver()  

        //动态注册activity变化的广播接收者  

        registerReceiver(musicStatusReceiver, intentFilter)  

        Intent intent = new Intent(this, MusicService.class)  

        startService(intent)  

  

        Intent intentMusicReceiver = new Intent("Get_Music_Control")  

        intentMusicReceiver.putExtra("control", 3)  

        sendBroadcast(intentMusicReceiver)  

  

    }  

    ///上一首  

    public void preMusic(View view) {  

        Intent intentMusicReceiver = new Intent("Get_Music_Control")  

        intentMusicReceiver.putExtra("control", 4)  

        sendBroadcast(intentMusicReceiver)  

    }  

    ///下一首  

    public void nextMusic(View view) {  

        Intent intentMusicReceiver = new Intent("Get_Music_Control")  

        intentMusicReceiver.putExtra("control", 5)  

        sendBroadcast(intentMusicReceiver)  

    }  

   ///定义 *** 作音乐的广播接收者  

    public class MusicStatusReceiver extends BroadcastReceiver {  

  

        @Override  

        public void onReceive(Context context, Intent intent) {  

            status = intent.getIntExtra("status", 0)  

            currentMusic = intent.getIntExtra("currentMusic", 0)  

            switch (status) {  

                case 0:  

                    textViewMp3Name.setText(names[currentMusic])  

                    textViewMp3Author.setText(authors[currentMusic])  

                    imageButton.setBackgroundResource(R.drawable.play32)  

                    break  

                case 1:  

                    textViewMp3Name.setText(names[currentMusic])  

                    textViewMp3Author.setText(authors[currentMusic])  

                    imageButton.setBackgroundResource(R.drawable.play32)  

                    break  

                case 2:  

                    imageButton.setBackgroundResource(R.drawable.pause32)  

                    textViewMp3Name.setText(names[currentMusic])  

                    textViewMp3Author.setText(authors[currentMusic])  

                    break  

            }  

        }  

    }  

}

最后,您觉得回答满意的话,请关注一下我的微博,我的名字除了中文以外的。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6698876.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-26
下一篇2023-03-26

发表评论

登录后才能评论

评论列表(0条)

    保存