简体   繁体   English

如何取消创建Android主屏幕小部件

[英]How to cancel creation of android home screen widget

I have a widget for my app. 我的应用程序有一个小部件。 On widget Creation when android triggers onEnabled I'm checking if a user meets a certain requirement then the user can go ahead and create a widget. 关于android触发onEnabled时的小部件创建,我正在检查用户是否满足特定要求,然后用户可以继续创建小部件。 But I need to stop widget creation if they don't meet a certain requirement. 但是,如果它们不符合特定的要求,则需要停止其创建。 I can't figure out how to cancel widget creation dynamically. 我不知道如何动态取消小部件的创建。 Here's what I was trying which didn't work. 这是我正在尝试的方法,但是没有用。

RemoteViews views;

void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                     int appWidgetId) {


    // Construct the RemoteViews object
    views = new RemoteViews(context.getPackageName(), R.layout.lock_widget);
    views.setOnClickPendingIntent(R.id.lock_widget, getPendingSelfIntent(context, LOCK));
    // Instruct the widget manager to update the widget
    appWidgetManager.updateAppWidget(appWidgetId, views);
}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    // There may be multiple widgets active, so update all of them
    for (int appWidgetId : appWidgetIds) {
        updateAppWidget(context, appWidgetManager, appWidgetId);
    }
}

@Override
public void onEnabled(Context context) {
    // Enter relevant functionality for when the first widget is created
    // Query User pro status when creating widget
    Log.d("Widget", "OnEnabled Fired");
    views.removeAllViews(views.getLayoutId());
    //views.
}

views.removeAllViews(views.getLayoutId()); doesn't seem to work. 似乎不起作用。

Is there even a way to this. 有没有办法做到这一点。 The workaround that I'm using is checking certain requirement check in onUpdate . 我正在使用的解决方法是在onUpdate检查某些需求检查。

The best solution in your case, enable widget component, if user have all "certain requirement". 如果您具有所有“特定要求”,那么最好的解决方案是启用窗口小部件组件。

So i assume a following case. 所以我假设以下情况。 User uses your app, and in some cases (you enable widget component, if user lose his "certain requirement" just disable widget component, so there is no widget in widget picker). 用户使用您的应用程序,并且在某些情况下(启用窗口小部件组件,如果用户失去了“某些要求”,则仅禁用窗口小部件组件,因此窗口小部件选择器中没有窗口小部件)。 You can easily achieve this through PackageManager. 您可以通过PackageManager轻松实现这一目标。

Updated: When user have a pro status, just enable widget, if not - just disable 更新:当用户具有专业状态时,只需启用小部件,否则请禁用

public static void setComponentState(Context context, boolean enabled) {
    int flag = (enabled ?
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED);

    ComponentName component = new ComponentName(context, YourAppWidgetProvider.class); // or make component via package name and class name (check Component constructors)

    PackageManager pm = context.getApplicationContext().getPackageManager();

    pm.setComponentEnabledSetting(component, flag, PackageManager.DONT_KILL_APP);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM