Android AppWidget - поставить свой собственный appWidget без подтверждения пользователя - PullRequest
1 голос
/ 09 февраля 2012

Предположим, у меня есть проект Android с рабочим appWidget, который можно добавить в панель запуска приложений. В проекте также есть действие, которое показывает созданный мной appWidget.

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

Я пытался (и успешно) показывал другие appWidget, но они также только показываются. однако нажатие на кнопки, кажется, имеет эффект стиля нажатия, как если бы можно было обрабатывать события касания. обратите внимание, что в будущем appWidget может иметь дополнительные функции в дополнение к щелчкам пользователя.

Может кто-нибудь сказать мне, что я могу сделать, чтобы решить эту проблему? Можно ли вообще так поступить, а если нет, то почему (так как это часть приложения)? Обратите внимание, что я хочу сделать как можно меньше изменений в appWidget, поскольку appWidget может быть сложным.

вот фрагмент для получения представления appWidget, чтобы показать его:

public View fetchAppWidgetView(final Context context, final ComponentName componentName)
{
  final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
  _appWidgetHost = new AppWidgetHost(context, INSTANCES_ID_PROVIDER);
  // get appWidgetInfo :
  final List<AppWidgetProviderInfo> infos = appWidgetManager.getInstalledProviders();
  AppWidgetProviderInfo appWidgetInfo = null;
  for (final AppWidgetProviderInfo info:infos)
    if (info.provider.getClassName().equals(componentName.getClassName()) && info.provider.getPackageName().equals(componentName.getPackageName()))
    {
      appWidgetInfo = info;
      break;
    }
  if (appWidgetInfo == null)
    return null;
  final int appWidgetId = _appWidgetHost.allocateAppWidgetId();
  // create and put the new widget:
  final AppWidgetHostView newWidget = _appWidgetHost.createView(context, appWidgetId, appWidgetInfo);
  newWidget.setAppWidget(appWidgetId, appWidgetInfo);
  _appWidgetHost.startListening();
  return newWidget;
}

public void startListening()
{
  //this method is called on the onStart() method of the activity
  _appWidgetHost.startListening();
}

1 Ответ

1 голос
/ 09 февраля 2012

В целях безопасности все в порядке - у вашего приложения нет прав на установку виджета приложения без знания пользователей на экране. единственные способы, которыми вы располагаете, - это позволить пользователю выбрать виджет из списка, или ваше приложение должно быть установлено в папку / system / app и таким образом, приложение является системным приложением со всеми необходимыми разрешениями.

...