安卓音乐播放器

程序实现本地音乐文件的播放功能,显示播放歌曲的信息,显示本地歌词,从网络上获取歌词,摇一摇切歌,切换背景等功能!

1.要去实现播放音乐文件,因为程序关掉之后,音乐是不能停掉的,所以要在活动中去绑定服务,对音乐文件的操作都在服务中进行,

所以第一步新建工程之后将活动与新建的服务绑定,在这里给服务命名为MusicService,

public class MusicService extends Service {

private ArrayList<MyMusic>  data=new ArrayList<>();//用来保存所有的音乐文件信息,MyMusic为实例类,一个MyMusic代表一个音乐文件

@Override
    public IBinder onBind(Intent intent) {
        return new LocalBinder();
    }

@Override
    public void unbindService(ServiceConnection conn) {
        super.unbindService(conn);
    }

public class LocalBinder extends Binder{

public MusicService getService(){
            return  MusicService.this;
        }

/**
     * 得到所有的音乐文件,这个方法去获得安卓手机里所有的音频文件,并保存在服务中
     * @return
     */
    private void getMusic(){

Cursor cursor = getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
                null
        );
        for (int i = 0; i < cursor.getCount(); i++) {
            cursor.moveToNext();
            //得到文件id
            Long id = cursor.getLong(
                    cursor.getColumnIndex(MediaStore.Audio.Media._ID));
            //得到作者
            String author = cursor.getString(
                    cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
            //得到标题
            String title = cursor.getString(cursor.getColumnIndex
                    (MediaStore.Audio.Media.TITLE));
            //得到路径,播放音乐时候需要用到,必不可少
            String url = cursor.getString(cursor.getColumnIndex
                    (MediaStore.Audio.Media.DATA));
            //得到播放时间
            Long time = cursor.getLong(
                    cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
            //得到大小
            Long size = cursor.getLong(
                    cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));
            //是否为音乐
            int isMusic = cursor.getInt(cursor
                    .getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));
            if (isMusic != 0&& time > 100000&&size>3500000) {
                MyMusic myMusic = new MyMusic(url, title, author, size, time, id);

      //将音乐添加到ArrayList中ArrayList用来保存音乐文件信息
                data.add(myMusic);
            }
        }
        cursor.close();
    }
    }

}

服务中这么写,只是第一步,后续还有更多的功能需要去添加,接下来在活动去绑定服务,获取服务中的音乐数据

 private MusicAdapter adapter;
   private ArrayList<MyMusic> data=new ArrayList<>();

private ServiceConnection conn= new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {

//绑定服务后开始运行,记得打括号
            musicService=((MusicService.LocalBinder)service).getService();

//得到数据
            data=musicService.getData();

adapter = new MusicAdapter(ListActivity.this, data,height);

listView_music.setAdapter(adapter);

textview_title.setText(musicService.gettitle());

if(musicService.isRun()){
                imageButton_pause.setImageDrawable(getResources().getDrawable(R.drawable.play));

}
        }

@Override
        public void onServiceDisconnected(ComponentName name) {
            musicService=null;
        }
    };

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

setContentView(R.layout.activity_list);
        height=getWindowManager().getDefaultDisplay().getHeight();

listView_music = (ListView) findViewById(R.id.listView);
        seekBar = (SeekBar) findViewById(R.id.seekBar);
        imageButton_pause = (ImageButton) findViewById(R.id.imageButton_pause);
        imageButton_next = (ImageButton) findViewById(R.id.imageButton_next);
        imageButton_special = (ImageButton) findViewById(R.id.imageButton_special);
        textview_title = (TextView) findViewById(R.id.textView_title);
        listView_left= (ListView) findViewById(R.id.draw_listview);
        line_list= (LinearLayout) findViewById(R.id.line_list);

//初始化按钮
        imageButton_special.setImageDrawable(getResources().getDrawable(R.drawable.special));
        imageButton_pause.setImageDrawable(getResources().getDrawable(R.drawable.pause));
        imageButton_next.setImageDrawable(getResources().getDrawable(R.drawable.next));
        textview_title.setText("");

intent=new Intent(this,MusicService.class);
        startService(intent);
        bindService(intent, conn, BIND_AUTO_CREATE);

adpater_left=new Adpater_left(this);
        listView_left.setAdapter(adpater_left);
        listView_left.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

switch (position) {
                    case 0:
                        //视频播放
                        Intent intent_video=new Intent(ListActivity.this,VideoListActivity.class);
                        startActivity(intent_video);
                        break;
                    case 1:
                        break;
                    case 2:
                        Intent intent_set = new Intent(ListActivity.this, SetActivity.class);
                        startActivity(intent_set);
                        break;
                    case 3:
                        Intent intent_bg = new Intent(ListActivity.this, BG_Activity.class);
                        startActivity(intent_bg);
                        break;
                    case 4:
                        ListActivity.this.finish();
                        musicService.exit();
                        stopService(intent);
                        break;
                }
            }
        });

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            int px, px1, px2;

@Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

}

@Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                px1 = seekBar.getProgress();

}

@Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                px2 = seekBar.getProgress();
                if (px1 == px2) {
                    musicService.seek(px2);
                    p = px2;
                    musicService.setProgress(p);
                } else if (px - 500 < px1 && px1 < px1 + 500) {
                    musicService.seek(px2);
                    p = px2;
                    musicService.setProgress(p);
                }
                imageButton_pause.setImageDrawable(getResources().getDrawable(R.drawable.play));
            }
        });
        listView_music.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

//播放当前曲目
                musicService.play(position);
                seek();
                musicService.startTimer();
                textview_title.setText(musicService.gettitle());
                imageButton_pause.setImageDrawable(getResources().getDrawable(R.drawable.play));
            }

});
        listView_music.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

registerForContextMenu(listView_music);
    }

时间: 2024-11-08 13:48:36

安卓音乐播放器的相关文章

安卓音乐播放器中歌词同步问题

音乐文件是.lrc格式的,以一首歌曲为例, [ti:回忆的沙漏][ar:邓紫棋][al:G.E.M.][by:][offset:0][00:02.50]回忆的沙漏 - G.E.M. 邓紫棋[00:04.62]词:庭竹[00:05.72]曲:G.E.M.[00:15.03]拼图一片片失落[00:18.56]像枫叶的冷漠[00:21.87]墙上的钟[00:23.79]默默数着寂寞[00:29.30]咖啡飘散过香味[00:33.06]剩苦涩陪着我[00:36.68]想念的心[00:39.44]埋葬我在

Xamarin.Android开发音乐播放器

最近.Net开源着实让C#火了一把,好久就听说Mono for Android一直没静下心来看,上周末找来看看,确实不错,前台界面axml编写跟Java安卓开发毫无区别,后台用C#其实很多windows下的方法都可以用,做一个安卓音乐播放器,主要实现音乐播放,上一曲下一曲,音乐播放列表,随机播放,扫描SD卡内所有音乐. 先show一组界面啊,话说有图有真相啊: 项目结构如图: Lrc是歌词处理方法 MusicService是安卓服务播放音乐,服务Broadcast,以及界面接收Receiver

安卓第十七天笔记--简易版本音乐播放器

title:简易版本音乐播放器 简易版本音乐播放器 1.布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="

安卓系统手机音乐播放器问题

我喜欢听歌,老歌.新歌.民歌.通俗歌都行,只要我认为好听就行了.除了在电脑上听歌外,还与时俱进的买了几个随身听和MP3,现在是手机和平板(Win8.1系统的),歌曲格式也由MP3升级为无损格式. 我现在有4条耳机,价格在120 - 568之间,分别是森海MX375,索尼XBA C10,爱科技K142HD和铁三角CKS77X,以前还有一条号称"女毒"的索尼E888,因时间太长(2004年儿子出差到日本花了7000多日元买的),去年终于寿终正寝了.对音乐发烧者来说,这些可能太低档了,价格没

手把手教你做音乐播放器(八)桌面小工具(上)

第8节 桌面小工具 桌面小工具是可以放置在主界面的.快速控制应用的小助手.例如我们的音乐小工具,它可以帮助用户在桌面上就完成音乐的暂停.播放.切换等操作,而不需要启动应用本身. 在安卓系统中,我们也常常叫它App widget. 实现一个App widget要经过以下几个步骤, 创建一个App widget类,让它继承自AppWidgetProvider,例如AnddleMusicAppWidget类: 放在res\layout目录下,为App widget的界面定义一个布局,例如anddle_

Android开发实战之简单音乐播放器

最近开始学习音频相关.所以,很想自己做一个音乐播放器,于是,花了一天学习,将播放器的基本功能实现了出来.我觉得学习知识点还是蛮多的,所以写篇博客总结一下关于一个音乐播放器实现的逻辑.希望这篇博文对你的学习和生活有所帮助.效果图: **实现逻辑** 在市面上的音乐播放app,即时你关了.那么一样会在后台播放,所以播放的逻辑应该写在Service中.并且能够实现Service和Activity之间进行通信.那么Service是四大组件之一,所以在使用的时候一定不要忘了在配置文件中声明一下. <ser

Andriod小项目——在线音乐播放器

Android在线音乐播放器 从大一开始就已经开始自学Java和Android了,到现在差不多有一年了. 终于到了开始做项目实战的阶段了.就先DIY个在线音乐播放器. 实现了以下功能: 这个播放器可以从本机电脑搭建的简易服务器里异步读取并解析json数据,播放音乐,实现音乐切换,时间显示,以及显示播放进度. 程序有三个界面,启动画面,音乐列表,播放器页面,可以通过音乐列表点击进入到播放界面. 这篇文章只大概写了一下实现的思路,描述了一些关键的地方. 文章最后还提供了源代码,可以在文章结尾处  下

做一个Android音乐播放器是遇到的一些困难

最近再做一个安卓的音乐播放器,是实验室里学长派的任务,我是在eclipse上进行开发的,由于没有android的基础,所以做起来困难重重. 首先是布局上的困难 1.layout里的控件属性不熟悉 2.想做一个音乐列表做不出来知道要用Listview控件,网上也找了许多的音乐播放器的代码,但导入项目中总会出错,所以想在这里请教各位 3.除了布局有困难外,实现相关功能也有困难,由于基础不行所以我并不想也做不出网上音乐播放器那么多的功能,我只想要我的播放器有播放,暂停,上一曲,下一曲的效果就行了,这还

手把手教你做音乐播放器(八)桌面小工具(下)(完)

8.4 MusicService的改造 8.4.1 App widget触发MusicService 当App widget的按钮被点击后,会触发隐式定义的Intent发送给MusicService.例如当下一首按钮被点击后,携带action-MusicService.ACTION_PLAY_MUSIC_NEXT的Intent将触发MusicService的onStartCommand()函数. 我们可以在onStartCommand()函数当中接收到App widget要求的操作命令,进行相应