首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RemoteViewsService不会运行

RemoteViewsService不会运行
EN

Stack Overflow用户
提问于 2017-04-19 16:11:28
回答 1查看 225关注 0票数 0

我似乎不明白为什么我的onUpdate和来自我AppWidgetProvider类的onRecieve都没有启动我的远程视图服务。onUpdate和onRecieve都会运行。接收者和服务都在清单中声明。

这是我的供应商

代码语言:javascript
运行
复制
public class WidgetProvider extends AppWidgetProvider {


@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    Timber.d("onUpdate");
    for (int appWidgetId : appWidgetIds) {
        Timber.d("onUpdate" + appWidgetId);

        Intent intent = new Intent(context, WidgetService.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));

        RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.stock_widget);
        rv.setRemoteAdapter(R.id.stock_list, intent);

        Intent stockHawkActivityIntent = new Intent(context, MainActivity.class);
        PendingIntent activityPendingIntent = PendingIntent.getActivity(context, 0, stockHawkActivityIntent, 0);
        rv.setPendingIntentTemplate(R.id.stock_list, activityPendingIntent);

        rv.setEmptyView(R.id.stock_list, R.id.empty_view);

        appWidgetManager.updateAppWidget(appWidgetId, rv);
    }
}

@Override
public void onReceive(Context context, Intent intent) {
    Timber.d("onRecive");
    super.onReceive(context, intent);
    if(QuoteSyncJob.ACTION_DATA_UPDATED.equals(intent.getAction())){
        Timber.d("Data was updated");
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
        int[] appWidgetIds = appWidgetManager.getAppWidgetIds(
                new ComponentName(context, getClass()));
        appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.stock_list);
    }
}

}

这是我的服务

代码语言:javascript
运行
复制
public class WidgetService extends RemoteViewsService {

private static final String[] COLUMNS = Contract.Quote.QUOTE_COLUMNS.toArray(new String[]{});

@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
    Timber.d("Remote Views Facotry");
    return new RemoteViewsFactory() {
        private Cursor data = null;

        @Override
        public void onCreate() {
        }

        @Override
        public void onDataSetChanged() {
            Timber.d("Data was changed");
            if (data != null) {
                data.close();
            }
            final long identityToken = Binder.clearCallingIdentity();

            Uri stocksUri = Contract.Quote.URI;
            data = getContentResolver().query(stocksUri, COLUMNS, null, null, null);

            Binder.restoreCallingIdentity(identityToken);
        }

        @Override
        public void onDestroy() {
            if (data != null) {
                data.close();
                data = null;
            }
        }

        @Override
        public int getCount() {
            Timber.d("getCount: " + data.getCount());
            return data == null ? 0 : data.getCount();
        }

        @Override
        public RemoteViews getViewAt(int position) {
            Timber.d("GetViewAt " + position);
            if (position == AdapterView.INVALID_POSITION ||
                    data == null || !data.moveToPosition(position)) {
                return null;
            }
            RemoteViews views = new RemoteViews(getPackageName(),
                    R.layout.widget_list_item);

            String symbol = data.getString(Contract.Quote.POSITION_SYMBOL);
            Float price = data.getFloat(Contract.Quote.POSITION_PRICE);
            Float absChange = data.getFloat(Contract.Quote.POSITION_ABSOLUTE_CHANGE);
            //Float prsChange = data.getFloat(Contract.Quote.POSITION_PERCENTAGE_CHANGE);

            views.setTextViewText(R.id.symbol, symbol);
            views.setTextViewText(R.id.price, price.toString());
            views.setTextViewText(R.id.change, absChange.toString());


            return views;
        }

        @Override
        public RemoteViews getLoadingView() {
            return new RemoteViews(getPackageName(), R.layout.widget_list_item);
        }

        @Override
        public int getViewTypeCount() {
            return 1;
        }

        @Override
        public long getItemId(int position) {
            Timber.d("GetItemId: " + position);
            if (data.moveToPosition(position))
                return data.getLong(Contract.Quote.POSITION_ID);
            return position;
        }

        @Override
        public boolean hasStableIds() {
            return false;
        }
    };
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-23 14:21:01

解决我的问题是个奇怪的办法。对服务名称进行前后重构,使其得以运行。即使在比较git提交之后,我也不知道重构发生了什么变化。但至少现在它开始运作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43500930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档