Плитка динамических быстрых настроек в нуге

Я могу добавить плитку быстрых настроек в свое приложение статически с помощью службы и объявить ее в манифесте с помощью

<service android:name=".QuickSettingsService"
            android:icon="@drawable/ic_qt_24dp"
            android:label="@string/qt_label"
            android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
            <intent-filter>
                <action android:name="android.service.quicksettings.action.QS_TILE" />
            </intent-filter>
 </service>

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


person Vijai    schedule 28.08.2016    source источник
comment
Но мне нужно добавлять их динамически - пользователь добавляет плитки. Вы просто предлагаете их пользователю. Я предоставляю настройку в своем приложении для включения или выключения определенных плиток - пользователь может использовать системный интерфейс для добавления и удаления плиток.   -  person CommonsWare    schedule 28.08.2016
comment
@CommonsWare Я имел в виду, динамически привязывать доступные плитки для добавления / удаления пользователем из ящика быстрых настроек. Поэтому, если пользователь отключает плитку в приложении, она не отображается в раскрывающемся списке быстрых настроек для их добавления. Вопрос отредактирован   -  person Vijai    schedule 28.08.2016
comment
Значит, если плитка не включена в вашем приложении, она даже не появится в системных настройках для отображения / скрытия плиток? Я не тестировал его, но попробуйте отключить службу плитки stackoverflow.com/questions/17409907/   -  person Eugen Pechanec    schedule 28.08.2016
comment
Вы можете попробовать включить и отключить каждый отдельный подкласс TileService с помощью PackageManager. При этом я не удивлюсь, если Android не справится с этим хорошо, и я скептически отношусь к тому, что такое поведение отвечает интересам пользователей.   -  person CommonsWare    schedule 28.08.2016
comment
@CommonsWare Я думаю, то, что вы предлагаете, совпадает с тем, что предлагает Евгений? Кроме того, если я собираюсь переключить службу, как насчет того, чтобы она выжила после перезагрузки? Или я должен добавить загрузчик, чтобы справиться с этим?   -  person Vijai    schedule 28.08.2016
comment
Думаю, то, что вы предлагаете, совпадает с тем, что предлагает Евгений? -- да. как насчет того, чтобы пережить перезагрузку? - статус включенного компонента должен сохраниться после перезагрузки.   -  person CommonsWare    schedule 28.08.2016


Ответы (1)


Решил эту проблему, включив и отключив службу через диспетчер пакетов.

if (state) {
   pm.setComponentEnabledSetting(componentName,
   PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
   PackageManager.DONT_KILL_APP);
} else
   pm.setComponentEnabledSetting(componentName,
   PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
   PackageManager.DONT_KILL_APP);

Где состояние - это логическое значение, представляющее переключатель для службы

person Vijai    schedule 29.08.2016