Android 桌面插件首次安装不启动应用,直接拖出桌面插件不显示数据问题

本文探讨了Android应用程序首次安装后,不通过应用直接拖出桌面插件时,本地数据无法显示的问题。在3.0及以上版本中,未手动启动的应用处于未激活状态,因此无法接收到系统广播。作者通过分析和调试,找到了解决方案,即使用configure属性配置一个Activity来激活主应用服务,并由服务发送广播更新插件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                五一小假,还要回来加班,果然是程序员的命,哈哈,不废话,入话题。

               对于桌面插件开发,估计大部分人都不陌生,比较简单,没有了解过的人可以看下这遍文章,最近测试的时候,

      测出了一个问题(不设置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插件没有这种问题,逆了一下配置和源码,不是我这种方法解决的,如果有人知道更好的方法,请留言!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值