2013-05-12 2 views
2

Я пытаюсь выяснить, как отправить намерение на главный экран, чтобы добавить к нему виджет, если можно. Есть идеи? Вот код, который я обманывал, чтобы хотя бы запросить выбор Add Widget.Отправка намерения на дом и виджет Добавить

AppWidgetManager mAppWidgetManager; 
AppWidgetHost mAppWidgetHost; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    selectWidget(); 

    mAppWidgetManager = AppWidgetManager.getInstance(this); 
    mAppWidgetHost = new AppWidgetHost(this, R.id.APPWIDGET_HOST_ID); 
} 

void selectWidget() { 
    int appWidgetId = this.mAppWidgetHost.allocateAppWidgetId(); 
    Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK); 
    pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    startActivityForResult(pickIntent, R.id.REQUEST_PICK_APPWIDGET); 
} 

Благодарим всех, кто вносит свой вклад.

+0

Существуют тысячи вариантов домашнего экрана. Немногие из тех, которые поддерживают виджеты приложений. – CommonsWare

+0

Можете ли вы расширить то, что вы пытаетесь выполнить, и что вы получили с этим кодом до сих пор? –

+0

@Jose_GD В настоящее время код просто отображает список добавленных виджетов, однако это он. То, что я пытаюсь выполнить, - это добавить виджет на главный экран при щелчке. Поэтому я хочу быть в своем приложении, запускать намерение на домашний экран, а затем отображать список виджетов, а затем щелкнуть и удерживать, чтобы разместить его на рабочем столе. Im unsure on, если это возможно с текущим android api's –

ответ

4

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

Взгляните на документацию для App Widget Host, в частности раздел о Host Binding. Код, который вы используете в методе selectWidget(), тот же, что и в исходном приложении Launcher (под заголовком Виджеты приложения для привязки на Android 4.0 и ниже). Затем идет реализация для onActivityResult, где намерение обрабатывается. Этот метод отсутствует в вашем коде, но если вы включите его, вы в конечном итоге выполните всю работу, выполняемую приложением на главном экране (см. Ниже на этой странице addAppWidget(Intent data)).

Если вы продолжите чтение документа Host Host Widget, вы увидите, что процесс привязки изменился на Android 4.1, и есть новое намерение для этой задачи, требующее разрешения в манифесте. И чтобы усложнить ситуацию больше, имейте в виду комментарий @ CommonsWare: существует множество реализаций на главном экране, которые, вероятно, делают процесс привязки по-разному :(

Подводя итог: нет способа получить список виджетов приложений и процесс, что пользователь выбрал, ни способ попросить приложение пусковое сделать это для нас, к сожалению Возможно, в будущих версиях Android, так как этот комментарий в latest Launcher source code показывает:.

/** Мы скорее всего, это будет позже, чтобы разрешить внешним приложениям размещать виджеты, но на данный момент мы просто хотим разоблачить действие aroun d для проверки в другом месте. */

+0

Большое вам спасибо за то, что вы меня поняли. Я искренне благодарю вас за то, что помогли мне понять это лучше. –

+0

Добро пожаловать. Что смешно, так это то, что я ответил на аналогичный вопрос некоторое время назад, и теперь я ответил вам, исследуя возможность запуска сборщика из активности ... :) –

Смежные вопросы