清除数据时会发送ACTION_PACKAGE_DATA_CLEARED广播,在widgetProvider里面监听该广播并进行处理就可以了
?
?
- public?static?class?PackageDataClearedReceiver?extends?BroadcastReceiver?{??
 
- ???????private?static?final?String?ACTION_PACKAGE_DATA_CLEARED?=?"com.mediatek.intent.action.SETTINGS_PACKAGE_DATA_CLEARED";??
 
- ??
 
- ???????public?void?onReceive(Context?context,?Intent?intent)?{??
 
- ???????????if?(!ACTION_PACKAGE_DATA_CLEARED.equals(intent.getAction()))?{??
 
- ???????????????return;??
 
- ???????????}??
 
- ???????????String?pkgName?=?intent.getStringExtra("packageName");??
 
- ???????????MusicLogUtils.v(TAG,?"PackageDataClearedReceiver?recevied?pkgName?=?"?+?pkgName);??
 
- ???????????if?(pkgName?!=?null?&&?pkgName.equals(context.getPackageName()))?{??
 
- ???????????????MediaAppWidgetProvider?mediaAppWidgetProvider?=?MediaAppWidgetProvider??
 
- ???????????????????????.getInstance();??
 
- ???????????????if?(mediaAppWidgetProvider?==?null)?{??
 
- ???????????????????MusicLogUtils.v(TAG,?"mediaAppWidgetProvider?is?null?");??
 
- ???????????????????return;??
 
- ???????????????}??
 
- ???????????????mediaAppWidgetProvider.defaultAppWidget(context,?null);??
 
- ???????????}??
 
- ???????}??
 
- ??
 
- ???}??
 
 
?
defaultAppWidget()函数会重新加载widget信息和布局文件,这样就可以恢复默认值了。
最后别忘了在AndroidManefest.xml里面加上:
?
- <receiver?android:name="com.android.music.MediaAppWidgetProvider$PackageDataClearedReceiver"?>??
 
- ????<intent-filter>??
 
- ????????<action?android:name="com.mediatek.intent.action.SETTINGS_PACKAGE_DATA_CLEARED"?/>??
 
- ????????<category?android:name="android.intent.category.DEFAULT"?/>??
 
- ????</intent-filter>??
 
- </receiver>??
 
- 
 
 
android清除数据后widget无法更新问题修改
原文:http://jlins.iteye.com/blog/2159022