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

您可以在清单中的应用程序插件的<receiver>元素上有android:enabled="false",然后用PackageManagersetComponentEnabledSetting()在运行时启用它,当用户做一些事情(例如,补交)。

但是,在主屏幕意识到存在新的潜在应用窗口小部件提供程序之前,这可能需要重新启动。

+0

谢谢!一个简短的问题:这是否意味着其他应用程序可以调用此函数来指定我的接收器组件,甚至可以从adb命令行启用它? – frangulyan

+0

@frangulyan:“这是否意味着其他应用程序可以调用此函数来指定我的接收器组件 - ” - 普通的Android SDK应用程序不能。系统应用程序,扎根设备上的应用程序等可能。 “甚至可以从adb命令行启用它?” - 我想是这样。恕我直言,这应该远远低于你的关注列表。 – CommonsWare

+3

晚会,我知道,但为了将来的参考'setComponentEnabledSetting()'不可靠地适用于所有Android版本的AppWidgets。错误报告在这里:https://issuetracker.google.com/issues/36914010 – String

相关问题