Как отменить создание виджета домашнего экрана Android - PullRequest
0 голосов
/ 07 января 2019

У меня есть виджет для моего приложения. При создании виджета, когда Android запускает onEnabled Я проверяю, удовлетворяет ли пользователь определенному требованию, тогда пользователь может создать виджет. Но мне нужно остановить создание виджетов, если они не отвечают определенным требованиям. Я не могу понять, как динамически отменить создание виджета. Вот то, что я пытался, но это не сработало.

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()); не похоже на работу.

Есть ли способ к этому? Обходной путь, который я использую, проверяет определенную проверку требований в onUpdate.

1 Ответ

0 голосов
/ 09 января 2019

Лучшее решение в вашем случае - включить компонент виджета, если у пользователя есть все «определенные требования».

Итак, я предполагаю следующий случай. Пользователь использует ваше приложение, а в некоторых случаях (вы активируете компонент виджета, если пользователь теряет свое «определенное требование», просто отключите компонент виджета, чтобы в палитре виджетов не было виджета). Вы можете легко достичь этого через PackageManager.

Обновлено: Когда у пользователя есть профессиональный статус, просто включите виджет, если нет - просто отключите

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...