Android:enable/disable 应用程序小部件以编程方式
Android: enable/disable app widgets programmatically
问题:有没有办法以编程方式启用我随应用程序提供的一些主屏幕小部件?例如,拥有一个 "premium" 小部件并仅在付款后才允许访问它?
正如 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>
但理论上广播接收器也可以通过编程方式添加,那么可以在运行时稍后注册小部件吗?
您可以在清单中的应用小部件的 <receiver>
元素上设置 android:enabled="false"
,然后使用 PackageManager
和 setComponentEnabledSetting()
在运行时启用它用户做某事(例如,付款)。
但是,这可能需要在主屏幕意识到存在新的潜在应用小部件提供程序之前重新启动。
PackageManager packageManager = getApplicationContext().getPackageManager();
//To disable widget
packageManager.setComponentEnabledSetting(new ComponentName(getApplicationContext(), MyAppWidgetProvider.class), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
//To enable widget
packageManager.setComponentEnabledSetting(new ComponentName(getApplicationContext(), MyAppWidgetProvider.class), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
问题:有没有办法以编程方式启用我随应用程序提供的一些主屏幕小部件?例如,拥有一个 "premium" 小部件并仅在付款后才允许访问它?
正如 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>
但理论上广播接收器也可以通过编程方式添加,那么可以在运行时稍后注册小部件吗?
您可以在清单中的应用小部件的 <receiver>
元素上设置 android:enabled="false"
,然后使用 PackageManager
和 setComponentEnabledSetting()
在运行时启用它用户做某事(例如,付款)。
但是,这可能需要在主屏幕意识到存在新的潜在应用小部件提供程序之前重新启动。
PackageManager packageManager = getApplicationContext().getPackageManager();
//To disable widget
packageManager.setComponentEnabledSetting(new ComponentName(getApplicationContext(), MyAppWidgetProvider.class), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
//To enable widget
packageManager.setComponentEnabledSetting(new ComponentName(getApplicationContext(), MyAppWidgetProvider.class), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);