Можно ли включить виджет приложения Android внутри существующего приложения (AppWidgetHost) без списка «Выбор виджетов»? - PullRequest
3 голосов
/ 15 мая 2011

Мы пытаемся разместить сторонний виджет в нашем собственном приложении, и мы пытаемся выяснить, как его можно добавить при установке нашего приложения, без необходимости выбора пользователем из списка «Выбор виджетов».Причина в том, что наш клиент нуждается в том, чтобы его пользователи выбирали этот конкретный виджет (и мы пытаемся держать код отдельно, чтобы они могли самостоятельно обновлять этот конкретный виджет внутри нашего приложения), и это не лучший UX дляПользователь сможет выбрать другой случайно.Есть ли способ отфильтровать список Select Widget?Или просто показать, что нам нужно показать?И поскольку у нас есть доступ к источнику этого стороннего виджета, это поможет?

Пока мы можем сказать, что единственный способ добавить виджет на хост виджета - это выделить идентификатор, запустить ACTION.APPWIDGET_PICK ипользователь может выбирать оттуда .. Но нам действительно нужно , чтобы найти способ либо для того, чтобы каким-либо образом фильтровать этот список, либо для установки этого стороннего виджета, когда также установлено наше приложение (хост).

Есть идеи?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 декабря 2017

Вот как вы встраиваете виджет в свое приложение без списка избранных виджетов. Пользователь просто увидит диалоговое окно подтверждения.

public boolean createWidget(View view, String packageName, String className) {
    // Get the list of installed widgets
    AppWidgetProviderInfo newAppWidgetProviderInfo = null;
    List<AppWidgetProviderInfo> appWidgetInfos;
    appWidgetInfos = mAppWidgetManager.getInstalledProviders();
    boolean widgetIsFound = false;
    for(int j = 0; j < appWidgetInfos.size(); j++)
    {
        if (appWidgetInfos.get(j).provider.getPackageName().equals(packageName) && appWidgetInfos.get(j).provider.getClassName().equals(className))
        {
            // Get the full info of the required widget
            newAppWidgetProviderInfo = appWidgetInfos.get(j);
            widgetIsFound = true;
            break;
        }
    }

    if (!widgetIsFound) {
        return false;
    } else {
        // Create Widget
        int appWidgetId = mAppWidgetHost.allocateAppWidgetId();
        AppWidgetHostView hostView = mAppWidgetHost.createView(getApplicationContext(), appWidgetId, newAppWidgetProviderInfo);
        hostView.setAppWidget(appWidgetId, newAppWidgetProviderInfo);

        // Add it to your layout
        LinearLayout widgetLayout = view.findViewById(R.id.widget_view);
        widgetLayout.addView(hostView);

        // And bind widget IDs to make them actually work
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            boolean allowed = mAppWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, newAppWidgetProviderInfo.provider);

            if (!allowed) {
                // Request permission - https://stackoverflow.com/a/44351320/1816603
                Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
                intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
                intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, newAppWidgetProviderInfo.provider);
                final int REQUEST_BIND_WIDGET = 1987;
                startActivityForResult(intent, REQUEST_BIND_WIDGET);
            }
        }

        return true;
    }
}
0 голосов
/ 01 июля 2011

Вы не можете фильтровать список, и вы не можете установить приложение, не щелкнув по нему пользователя. Но вы можете проверить результаты выбора пользователя и отклонить его, если он выбрал неправильный виджет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...