4

Вопрос: Есть ли способ включить некоторые виджеты рабочего стола, которые я выдаю с помощью моего приложения программно? Например, имея «премиальный» виджет и предоставляющий ему доступ только после оплаты?Android: включить/отключить виджеты приложений программно


Как Android docs говорят, нужно добавить широковещательный приемник в манифесте, чтобы сообщить системе, что есть виджет идет с приложением:

<receiver android:name="ExampleAppWidgetProvider" > 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" 
      android:resource="@xml/example_appwidget_info" /> 
</receiver> 

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

ответ

4

Вы можете android:enabled="false" на <receiver> элемент для приложения виджет в манифесте, а затем использовать PackageManager и setComponentEnabledSetting(), чтобы включить его во время выполнения, когда пользователь делает что-то (например, заплатить).

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

+0

Спасибо! Короткий вопрос: означает ли это, что другие приложения могут вызвать эту функцию, указав мой компонент-получатель или даже включив его из командной строки adb? – frangulyan

+0

@frangulyan: «это означает, что другие приложения могут вызывать эту функцию с указанием моего компонента-получателя» - обычные приложения Android SDK не могут. Системные приложения, приложения на корневых устройствах и т. Д. «даже включить его из командной строки adb?» -- Я думаю так. ИМХО, это должно быть довольно далеко от вашего списка проблем. – CommonsWare

+3

Поздно к вечеринке, я знаю, но для будущей ссылки 'setComponentEnabledSetting()' не надежно работает для AppWidgets на всех версиях Android. Отчет об ошибке находится здесь: https://issuetracker.google.com/issues/36914010 – String

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