首先申明,我是菜鸟,
正在做一个很小的音乐播放器,遇到了一个问题,首先,service中有这样一段代码:@Overridepublic void onStart(Intent intent, int startId) { super.onStart(intent, startId); Bundle data = intent.getExtras(); if(data.getSerializable("list")==null||data.getInt("current")<0){ Log.i("MusicService", "没有音乐"); return; } //取得数据 position = data.getInt("current"); musicList = (List<Music>)data.getSerializable("list"); music = musicList.get(position); try { player.reset(); Log.i("MusicService", "文件位置:"+music.getLocation()); player.setDataSource(music.getLocation()); } catch (Exception e) { e.printStackTrace(); }   /** * 初始化数据 */int state = intent.getIntExtra("state", -1); if (state != -1) { switch (state) { case TagUtil.MUSIC_PLAY:// 播放 if (!player.isPlaying()) { play(); } break; case TagUtil.MUSIC_PAUSE:// 暂停 if (player.isPlaying()) { pause(); } break; case TagUtil.MUSIC_STOP:// 停止 stop(); break; // case TagUtil.PROGRESS_CHANGE:// 进度条改变 // currentTime = intent.getExtras().getInt("progress"); // player.seekTo(currentTime); // break;   } }     }这是控制播放之类的,还有在播放界面我打算这样实现的:/** * 播放按钮控制 */class Click implements OnClickListener {   @Overridepublic void onClick(View v) {   switch (v.getId()) { case R.id.play: //控制播放/赞停 Log.i("播放", R.drawable.play+""); if(!flag){//正在播放 flag=false; btn_play.setImageResource(R.drawable.player_btn_player_pause); play(); }else{//已经暂停 flag=true; btn_play.setImageResource(R.drawable.player_btn_player_play); pause(); } break; case R.id.pre: //控制上一首   pre(); break; case R.id.next: //控制下一首 next(); break; case R.id.stop: //控制停止 stop(); break; default: break; } }   }       /** * 播放 */public void play() { Intent intent = new Intent(); intent.setAction("com.app.media.MUSIC_SERVICE"); intent.putExtra("state", TagUtil.MUSIC_PLAY);// 向服务传递数据 startService(intent);   } /** * 暂停 */public void pause() { Intent intent = new Intent(); intent.setAction("com.app.media.MUSIC_SERVICE"); intent.putExtra("state", TagUtil.MUSIC_PAUSE); startService(intent); }   /** * 上一首 */private void pre() {   Intent intent = new Intent(); intent.setAction("com.app.media.MUSIC_SERVICE"); intent.putExtra("state", TagUtil.MUSIC_PRE); startService(intent); } 
但是,点击按钮的话,service里面怎样得到那个musicList 和当前position??
可以用广播和那个receiver吗?大概流程是怎样的?
每次都是获取不到,请问一下,这个问题该怎样解决??在线等,跪求啊!!!!!!!!!!androidservice音乐播放器receiver广播

解决方案 »

  1.   

    代码重新发下,那个好像看不了!
    @Override
    public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
    Bundle data = intent.getExtras();
    if(data.getSerializable("list")==null||data.getInt("current")<0){
    Log.i("MusicService", "没有音乐");
    return;
    }
    //取得数据
    position = data.getInt("current");
    musicList = (List<Music>)data.getSerializable("list");
    music = musicList.get(position);
    try {
    player.reset();
    Log.i("MusicService", "文件位置:"+music.getLocation());
    player.setDataSource(music.getLocation());
    } catch (Exception e) {
    e.printStackTrace();
    }

    /**
     * 初始化数据
     */
    int state = intent.getIntExtra("state", -1);
    if (state != -1) {
    switch (state) {
    case TagUtil.MUSIC_PLAY:// 播放
    if (!player.isPlaying()) {
    play();
    }
    break;
    case TagUtil.MUSIC_PAUSE:// 暂停
    if (player.isPlaying()) {
    pause();
    }
    break;
    case TagUtil.MUSIC_STOP:// 停止
    stop();
    break;
    // case TagUtil.PROGRESS_CHANGE:// 进度条改变
    // currentTime = intent.getExtras().getInt("progress");
    // player.seekTo(currentTime);
    // break; }
    }


    }
    /**
     * 播放
     */
    public void play() {
    Intent intent = new Intent();
    intent.setAction("com.app.media.MUSIC_SERVICE");
    intent.putExtra("state", TagUtil.MUSIC_PLAY);// 向服务传递数据
    startService(intent);

    }
    /**
     * 暂停
     */
    public void pause() {
    Intent intent = new Intent();
    intent.setAction("com.app.media.MUSIC_SERVICE");
    intent.putExtra("state", TagUtil.MUSIC_PAUSE);
    startService(intent);
    }

    /**
     * 上一首
     */
    private void pre() {

    Intent intent = new Intent();
    intent.setAction("com.app.media.MUSIC_SERVICE");
    intent.putExtra("state", TagUtil.MUSIC_PRE);
    startService(intent);
      

  2.   

    还有一个函数,是播放界面的:/**
     * 播放按钮控制
     */
    class Click implements OnClickListener { @Override
    public void onClick(View v) {

    switch (v.getId()) {
    case R.id.play:
    //控制播放/赞停
    Log.i("播放", R.drawable.play+"");
    if(!flag){//正在播放
    flag=false;
    btn_play.setImageResource(R.drawable.player_btn_player_pause);
    play();
    }else{//已经暂停
    flag=true;
    btn_play.setImageResource(R.drawable.player_btn_player_play);
    pause();
    }
    break;
    case R.id.pre:
    //控制上一首

    pre();
    break;
    case R.id.next:
    //控制下一首
    next();
    break;
    case R.id.stop:
    //控制停止
    stop();
    break;
    default:
    break;
    }
    }

    }
      

  3.   

    你的那个 点击界面 实在activity 里面 还是以悬浮框的形式存在在 launcher界面如果点击按钮在Acitvity 你可以通过 listview 传你的音乐的Uri 或者 位置什么的 如果是在悬浮框的话 你可以通过数据库查询 获取到那个列表 保存起来 通过 媒体数据库 什么的 
      

  4.   

    点击按钮是在Acitvity。通过那个控制后台Service,service的数据有什么办法传到Acticety中吗?没有跳转的情况下,还有,那个  通过 媒体数据库 是什么??
      

  5.   

    点击按钮是在Acitvity。通过那个控制后台Service,service的数据有什么办法传到Acticety中吗?没有跳转的情况下,还有,那个  通过 媒体数据库 是什么??