music的 桌面小部件的更新不及时问题

Android 开发中遇到music的 桌面4*2小部件的更新不及时问题,尤其在重启手机,切换语言,开关机过程中等情况下尤为明显,表现在小部件界面一片空白.现在优化了一番,小部件更新的问题就解决了,方案如下:
源码里面music小部件的代码主要在src/com/android/music/MediaAppWidgetProvider.java里面
未改动之前的代码:public class MediaAppWidgetProvider extends AppWidgetProvider {

@Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        MusicLogUtils.i(TAG, "onUpdate");
        isAppWidget = true;
        defaultAppWidget(context, appWidgetIds);
        // Send broadcast intent to any running MediaPlaybackService so it can
        // wrap around with an immediate update.
        Intent updateIntent = new Intent(context, MediaPlaybackService.class);
        updateIntent.setAction(MediaPlaybackService.SERVICECMD);
        updateIntent.putExtra(MediaPlaybackService.CMDNAME, MediaAppWidgetProvider.CMDAPPWIDGETUPDATE);
        updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
        updateIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
        context.startService(updateIntent);
    }  //重写appWidgetProvider的onUpdate方法,此方法当小部件更新时会触发.
    private void defaultAppWidget(Context context, int[] appWidgetIds) {
        final Resources res = context.getResources();
        final RemoteViews views = new RemoteViews(context.getPackageName(),          R.layout.album_appwidget);
        views.setViewVisibility(R.id.title, View.GONE);
        /// M: Set default play/pause button image resource
        views.setImageViewResource(R.id.control_play, R.drawable.rgk_music_btn_play);
        views.setTextViewText(R.id.artist, res.getText(R.string.widget_initial_text));
        linkButtons(context, views, false /* not playing */);
        pushUpdate(context, appWidgetIds, views);
    }
    private void pushUpdate(Context context, int[] appWidgetIds, RemoteViews views) {
        // Update specific list of appWidgetIds if given, otherwise default to
        // all
        final AppWidgetManager gm = AppWidgetManager.getInstance(context);
        MusicLogUtils.i(TAG, "pushUpdate");
        /// M: update app widget @{
        if (appWidgetIds != null) {
  4
            gm.updateAppWidget(appWidgetIds, views);
        } else {
            gm.updateAppWidget(new ComponentName(context, this.getClass()), views);
        }
        /// @}
    }
    private boolean hasInstances(Context context) {
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
        int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, this.getClass()));
        /// M: log appWidgetIds status @{
        int widgetLength = (appWidgetIds == null ? 0 : appWidgetIds.length);
        MusicLogUtils.i(TAG, "hasInstances number is " + widgetLength);
        /// @}
        return (widgetLength > 0);
    }
    void notifyChange(MediaPlaybackService service, String what) {
        /// M: add QUIT_PLAYBACK status to update widget and l
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值