没有人修改过原生的音乐播放器appwidget吗?

解决方案 »

  1.   

    参照MediaPlaybackActivity.java中cycleRepeat在MediaPlaybackService.java写了如下函数private void cycleRepeat() { MusicLogUtils.v(TAG, "zhongyuan");
     int mode = getRepeatMode();
     if (mode == MediaPlaybackService.REPEAT_NONE) {
     setRepeatMode(MediaPlaybackService.REPEAT_ALL);
     } else if (mode == MediaPlaybackService.REPEAT_ALL) {
     setRepeatMode(MediaPlaybackService.REPEAT_CURRENT);
     if (getShuffleMode() != MediaPlaybackService.SHUFFLE_NONE) {
     setShuffleMode(MediaPlaybackService.SHUFFLE_NONE);
     //setShuffleButtonImage();
     }
     } else {
     setRepeatMode(MediaPlaybackService.REPEAT_NONE);
     }
     //setRepeatButtonImage();

     
     }在MediaAppWidgetProvider.java中linkButtons函数添加如下代码 intent=new Intent(MediaPlaybackService.REPEAT_ACTION);
    intent.setComponent(serviceName);
    pendingIntent = PendingIntent.getService(context,
                    0 /* no requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    views.setOnClickPendingIntent(R.id.widget_repeat, pendingIntent);在performUpdate函数中更新图片 if(service.getRepeatMode()== MediaPlaybackService.SHUFFLE_NORMAL)
    {
    views.setImageViewResource(R.id.widget_shuffle, R.drawable.ic_widget_shuffle_on);
    }
    else
    {
    views.setImageViewResource(R.id.widget_shuffle, R.drawable.ic_widget_shuffle_off);
    } 然后,在onStartCommand分支结构中调用cycleRepeat和notifyChange(PLAYSTATE_CHANGED);
    发现:activity中点击了按钮,widget上相应的按钮没有马上刷新过来。不知道这思路对不?请高手指教
      

  2.   

    同样,在appwidget上的当前播放音乐时间也没有实时更新过来,请问:要怎样达到实时更新?
      

  3.   

    没人处理过这个问题?
    当前播放音乐时间的更新,重复播放按的更新是不是都要放在MediaPlaybackService.java来处理。
    MediaPlaybackService.java中有直接处理播放,暂停,下一首,没有处理其他的,该怎么办?
      

  4.   

    所谓“更新AppWidget”,也就是AppWidgetProvider知道变化时通知AppWidgetHost更新:在状态改变时,更新RemoteViews,再通过AppWidgetManager.updateAppWidget()用RemoteViews来更新
    AppWidget系统就会通知AppWidgetHost来更新其AppWidgetHostView了。
      

  5.   

    是按照这个步骤来的,widget更新没问题。问题是:activity的重复播放按钮状态改变了,而widget的重复播放按钮状态没有及时改变,如果点播放暂停按钮或者播放完切换到下一首歌,状态就改变过来了。widget播放暂停按钮是系统已实现好了,没有问题。而重复播放按钮是自己添加的,请大侠指点
      

  6.   

    很明显,Activity里“重复播放按钮状态改变”这个时机知道吧,此时有通知Widget更新吗?“播放暂停按钮或者播放完切换到下一首歌”那是原生就给你做好了,当然Widget能更新了。
      

  7.   


    非常感谢th1789.按照你的方法,在按钮状态变化地方即监听函数中,用RemoteView更新OK。
    请问:系统activity是用refreshNow函数每隔500ms更新播放时间和歌词。我在该函数中调用自己写的更新widget的函数,没有更新成功。这会是什么原因。
      

  8.   

    请问专家th1789:播放当前时间怎样实时更新?
    源码中没有获取当前时间函数及总时间函数。所以在MediaPlaybackService类中添加当前时间函数getCurrentTime(),然后在MediaAppWidgetProvider类中通过mcurrentTime=service.getCurrentTime()获得时间,并且通过在函数performUpdate中 views.setTextViewText(R.id.widget_currenttime,mcurrentTime);把mcurrentTime更新到当前播放时间textview上。重复播放按钮更新也是在这个函数中可以更新,但是当前时间不能实时更新,如果点击了重复播放按钮(自己添加的)就更新过来,不点击就不更新。
    像添加重复播放按钮一样去设置PendingIntent也更新不了,请指教,谢谢!
      

  9.   

    在MediaAppWidgetProvider中采用定时器Timer机制,歌曲当前时间也没有更新过来。
    pushUpdate中初始化初始化调用MyTimer:       
     final AppWidgetManager gm = AppWidgetManager.getInstance(context);
    Timer timer=new Timer();实习MyTimer类并且让RemoteView更新当前播放时间TextView:
    class MyTime extends TimerTask
    {
    RemoteViews remoteViews;
    AppWidgetManager appWidgetManager;
    ComponentName thisWidget;
    MyTime(Context context, AppWidgetManager appWidgetManager)
    {
    this.appWidgetManager=appWidgetManager;
    remoteViews=new RemoteViews(context.getPackageName(), R.layout.album_appwidget);
    this.thisWidget=new ComponentName(context,MediaAppWidgetProvider.class);
    }
    public void run()
    {
    remoteViews.setTextViewText(R.id.widget_currenttime,mcurrentTime);
    appWidgetManager.updateAppWidget(thisWidget, remoteViews);
    }
    }这样,歌曲当前时间还是更新过来(只是一闪一闪的,时间根本没变)。不知道是哪里出问题了。
    采用Thread+Handler机制也是一样没有成功。请大侠指点该怎样更新歌曲当前时间?