五一小假,还要回来加班,果然是程序员的命,哈哈,不废话,入话题。
对于桌面插件开发,估计大部分人都不陌生,比较简单,没有了解过的人可以看下这遍文章,最近测试的时候,
测出了一个问题(不设置configure属性),就是应用首次安装后不直接打开APP,然后把相关的桌面插件拖出来,
发现本地数据都显示不出,这现象只有首次安装才有,调试又直接启动了APP,只能不断地请缓存才能调试,经过一
番调试发现,在 这种情况下,把插件拖出来,是不会触发onReceive()方法(接收系统广播插件会触发的方法)。
经过一番Google才发现,原来这现象其实是正常的,因为在3.0以后,所有应用在没有手动启动过的,是处于未
激活状态,也就是说他接收不到系统发来的任何广播,奇怪的是不启动应用,第二次拖插件出来,他就能获取到
本地数据了,为何第二次他就能接收到系统的广播了,在此留个疑问。
下面说说解决方法吧,就是利用configure属性配置一个activity,让他去激活主应用服务,再让服务发广播去更
新插件,上代码
onfigure 的activity:
public class ConfigureMyNoteWidget extends Activity {
private int appwidgetId;
private Context mContext;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext=this;
Bundle bundle=getIntent().getExtras();
if(bundle!=null){
intent=new Intent();
appwidgetId=bundle.getInt("appWidgetId",0);
intent.putExtra("appWidgetId",appwidgetId);
setResult(0,intent); //这里必须设置,否则插件拖出来会异常
}
startService(new Intent(this,LifeCalendarMainService.class)); //激活主应用服务
setResult(-1,intent); //这里必须设置,否则插件拖出来会异常
finish();//不需要显示,直接关闭
}
} <!--桌面插件配置界面-->
<activity
android:name=".widget.settings.ConfigureMyNoteWidget"
android:theme="@style/Theme_Transparent"> ///设置一个透明样式,避免拖出插件时闪黑
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
我看到别APP插件没有这种问题,逆了一下配置和源码,不是我这种方法解决的,如果有人知道更好的方法,请留言!!