Как открыть средство выбора виджетов в приложениях на сотовом / ИКС? - PullRequest
2 голосов
/ 27 февраля 2012

У меня есть приложение со стартовой активностью, которое показывает виджеты приложений, которые можно добавить на домашний экран.

Когда пользователь нажимает на этот виджет приложения, приложение должно отправить намерение открыть список виджетов.

Но я не могу найти намерение открыть панель запуска со списком виджетов, чтобы выбрать.Является ли это возможным?

1 Ответ

2 голосов
/ 11 августа 2012
static final String EXTRA_CUSTOM_WIDGET = "custom_widget";
static final String SEARCH_WIDGET = "search_widget";
void pickappWidget(){
     int appWidgetId = Launcher.this.mAppWidgetHost.allocateAppWidgetId();

     Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);
     pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
     // add the search widget
     ArrayList<AppWidgetProviderInfo> customInfo =
             new ArrayList<AppWidgetProviderInfo>();
     AppWidgetProviderInfo info = new AppWidgetProviderInfo();
     info.provider = new ComponentName(getPackageName(), "XXX.YYY");
     info.label = getString(R.string.group_widgets);
     info.icon = R.drawable.ic_allapps;
     customInfo.add(info);
     pickIntent.putParcelableArrayListExtra(
             AppWidgetManager.EXTRA_CUSTOM_INFO, customInfo);
     ArrayList<Bundle> customExtras = new ArrayList<Bundle>();
     Bundle b = new Bundle();
     b.putString(EXTRA_CUSTOM_WIDGET, SEARCH_WIDGET);
     customExtras.add(b);
     pickIntent.putParcelableArrayListExtra(
             AppWidgetManager.EXTRA_CUSTOM_EXTRAS, customExtras);
     // start the pick activity
     startActivityForResult(pickIntent, REQUEST_PICK_APPWIDGET);
}

и в вашей функции onActivityResult обработайте возвращение сообщения из диалога выбора виджетов

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    mWaitingForResult = false;
    if (resultCode == RESULT_OK && mAddItemCellInfo != null) {
        switch (requestCode) {
            case REQUEST_PICK_APPWIDGET:
                addAppWidget(data);
                break;
        }
}


void addAppWidget(Intent data) {

    int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
    AppWidgetProviderInfo appWidget = mAppWidgetManager.getAppWidgetInfo(appWidgetId);

    if (appWidget.configure != null) {
        // Launch over to configure widget, if needed
        Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);
        intent.setComponent(appWidget.configure);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);

        startActivityForResult(intent, REQUEST_CREATE_APPWIDGET);
    } else {
        // Otherwise just add it
        onActivityResult(REQUEST_CREATE_APPWIDGET, Activity.RESULT_OK, data);
    }
}
...