【Android】如何在自己的程序中添加appWidget

【Android】如何在自己的程序中添加appWidget,第1张

其实在android中提供了三个非常简单的类,应用这三个类我们可以将一个appWidget“表面上”,注意是“表面上”添加到你的应用中。代码如下: AppWidgetHost host = new AppWidgetHost(this, 1024);

int appWidgetId = hostallocateAppWidgetId();

AppWidgetManager mAppWidgetManager = AppWidgetManagergetInstance(this);

mAppwidgetProviderInfos = (ArrayList

) mAppWidgetManagergetInstalledProviders();

for (int i = 0; i < mAppwidgetProviderInfossize(); i++){AppWidgetProviderInfo widgetInfo = mAppwidgetProviderInfosget(i);

AbsoluteLayoutLayoutParams allp = new AbsoluteLayoutLayoutParams(100, 100, 0, 0);

abladdView(hostView, allp);

稍微解释下,新建个AppWidgetHost,分配个appWidgetId,用AppWidgetManager得到一个AppWidgetProviderInfo,再用host建立AppWidgetHostView,最后设置下在layout中的位置,把它添加到layout上。

这样,一个表面上的就好了。不过问题也随之而来,这是个又困扰了我几天的问题,就是这个appWidget根本就是处于个disable的状态,即不更新,也无法响应broadcast。经过对于launcher,framework和网上的一些理解和查阅,终于找到了问题所在,而且是个相对来说比较恶心的问题。launcher中是这么做的,就是通过起一个

Intent pickIntent = new Intent(AppWidgetManagerACTION_APPWIDGET_PICK);

将appWidgetId 传入这个

pickIntentputExtra(AppWidgetManagerEXTRA_APPWIDGET_ID, appWidgetId);再调用startActivityForResult(pickIntent, REQUEST_PICK_APPWIDGET);

来实现的,当然这个intent还要些必要的参数。这里就不说了,代码里自己看。

在onActivityResult里进行得到appWidgetId,AppWidgetProviderInfo,并建立个AppWidgetHostView,添加到layout上。

方法一是:connect时添加参数Qt::DirectConnection,以保证其不被放入信号队列,从而达到想要的效果,但这种办法不一定能解决该问题,因为QTextCharFormat类型是Qt的基本类型,是可以作为信号参数使用的,但此处却提示它并不能作为信号参数,所以根本问题不是Qt::DirectConnection所能解决的。

经过进一步检查你会发现问题产生的原因是,该信号被放在了一个线程里面,但线程内信号是必须要放入队列的,所以上面的方法根本不可行,因此解决问题的关键是将相关信号移出run函数,可以采用空参数信号,或等待finished()信号完毕后,用finished()信号去关联一个槽函数来解决,甚至该槽函数就是QThread的私有槽。

pycharm运行程序显示没有qt可以解决。根据查询相关公开信息显示,在安装pyqt时,发现pycharm无法识别pyqt。虽然包和环境变量已经安装好,设置完成。但是pycharm还是会提示unresolvedreferencetoQWidget,而且代码提示功能也不能使用。这时候代码可以编译通过,也可以运行,说明包还是安装成功的,但是pycharm没有识别。解决办法是在cmd中使用以下命令将不识别的包重新生成一下。第一个部分是python,第二个参数是pycharm的路径中的generator3py路径。然后后面跟着-x-d两个数参数最后一个参数是根据你自己user目录中pycharm的目录来写。

QML开发的界面其实是采用的QGraphicsView那套架构,用QML开发界面的好处就在于开发周期短(前提是你熟悉css),可移植性强(因为你可以将其做成QML插件,甚至放到一个文件里面作为脚本便于其他程序加载,但前提时你不需要过多地与其他非QML模块进行通信),还有就是QML的界面比较有质感。。

QWidget的优点就是与其他非GUI模块交互很方便。不需要用到Declarative模块里面的类。

ps:以上纯属个人观点

以上就是关于【Android】如何在自己的程序中添加appWidget全部的内容,包括:【Android】如何在自己的程序中添加appWidget、关于QT textWidget显示问题 程序异常退出了,求解、pycharm运行程序显示没有qt不能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9723421.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存