问题标签 [android-appwidget]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4346 浏览

android - Android - AppWidgets、AlarmManager 和 AsyncTask

我在使用AlarmManager生成的广播更新应用小部件时运气不佳。这就是我所做的:

初始化AlarmManager_AppWidgetProvider#onEnabled

我还定义了广播接收器,它只监听由AlarmManager. 当更新被触发时,代码运行AsyncTask进行网络调用。当AsyncTask完成 ( onPostExecute) 时,它使用先前获得的实例AppWidgetManager来更新小部件。这一切实际上运行良好,直到在日志中我看到消息"Process com.foo.myapp (pid 12345) has died",之后AlarmManager再也不会触发另一个更新。

我是否需要进行某种检查以重新启动警报?例如,当用户访问小部件的父应用程序时?如果我的应用在请求过程中死机,如何确保我可以完成长时间运行的任务并返回到小部件?

0 投票
3 回答
1248 浏览

android - appWidget 定位代码

我有一个应用程序小部件中的代码,当手机在主屏幕上的方向发生变化时,我想运行它,例如当键盘翻转时。我有一张想要在我的 appwidget 中的 imageview 中更改的图像。我不能使用与方向相关的不同布局(即“layout”和“layout-land”),因为直到运行时我才知道图像文件的名称,它是在运行时创建的。无论如何,只有在显示主屏幕、我的 appwidget 处于活动状态并且方向刚刚改变时,才会触发代码运行?

我可以收听 configuration_change 广播,但每次手机切换到横向或纵向时都会运行,我只希望它在显示主屏幕时发生。我想不出android中有什么好的方法来做到这一点。谢谢

瑞安

0 投票
3 回答
25502 浏览

android - Android 小部件未更新

我正在尝试实现一个简单的小部件以在主屏幕上显示。我遇到的问题是 onUpdate 在我安装小部件时只被调用一次。配置如下。注意:我不会将更新时间设置为 20 秒,因为我知道这会耗尽电池(只是测试)。

配置:

清单摘录:

我在安装小部件时观察到以下行为:在我的 WidgetProvider 类中调用 onReceive,然后调用 onEnabled,然后调用 onReceive,然后调用 onUpdate。

之后,小部件将显示,并且永远不会再次调用 onUpdate。当调用 onUpdate 并且上面 XML 中设置的所有内容(例如更新周期)正确时,我还会检查提供者的设置。

0 投票
1 回答
1169 浏览

android - Home进程重启后解耦AppWidget Intents

我的 Android 应用程序 Transdroid 提供了几个主屏幕小部件。每个 AppWidget 都有 2 个“按钮”(ImageButton),一个启动应用程序,一个启动一些刷新 AppWidget 内容的活动。很简单。是一个屏幕截图。小部件代码位于我的 Google 代码网站上,但最重要的是:

问题是:在 Home 进程重新启动后,不会调用小部件的 onUpdate,因此用于将功能附加到按钮的 PendingIntents 丢失了。

很容易复制。

  1. 启动模拟器
  2. 添加一个小部件(使用 PendingIntent 来启动一个活动)
  3. 单击按钮以查看它的实际工作原理
  4. 强制终止主进程('adb -e shell kill 96' 其中 96 是 android.process.acore 的 PID)
  5. 小部件的按钮不再起作用。

更准确地说:当 android.process.acore Home 进程重新启动时,不会调用 onReceive,因此不会调用 onUpdate。反过来,没有附加任何意图。

任何人都遇到过同样的问题并且知道如何规避这个问题?

0 投票
2 回答
1352 浏览

android - 寻找优雅的 appwidget 皮肤解决方案

我有一个 appwidget 应用程序,希望用户能够创建可以在运行时应用的皮肤。我首选的解决方案是使用带有九个补丁 png 图像的 apk 文件,这些图像可以拉伸以适合 ImageView 的小部件,但是它开始看起来我可能不得不使用另一种打包技术(例如 zip 文件)。

我尝试过:使用 context.getResourcesForApplication(my.app).getResources... 将九个补丁资源作为 Drawable 导入,使用画布将它们转换为位图,并使用 setImageViewBitap 将位图设置为 RemoteView。这不起作用,因为我需要在转换期间指定结果视图 (myBitmap.setBounds(..,..)) 的大小,并且我的 appwidget 中的某些宽度/高度不固定。也许有一种方法可以获得我错过的高度等。

使用 setImageViewUri() 将资源直接导入 RemoteView 这不起作用,因为该函数似乎不再读取 android.resource:// Uri 的(我在 ImageView 源中四处寻找,它似乎只读取文件路径和内容:// 乌里的)

使用 setImageViewResource() 将资源直接导入 RemoteView 不起作用,因为从外部包检索的 id 显然不包含包引用。

我要避免的是对我所有的 appwidget 宽度和高度进行硬编码,或者使用单独的打包方案。

有没有人很好地实现了 appwidget 皮肤并想分享知识?或者,我的逻辑中可能存在一个可以指出的漏洞。

如果需要,我可以提供代码,尽管我现在没有任何代码。

0 投票
1 回答
1247 浏览

android - 我可以动态地将视图添加到主屏幕小部件吗?

我正在写一个主屏幕小部件。是否可以通过 RemoteViews 将视图(例如 ImageView)添加到主屏幕小部件?我想动态生成主屏幕小部件的视图。

谢谢。

我的代码和上面一样。但是当我打电话时updateViews.addView(aView),我的 IDE 不允许我这样做并给我一个编译错误。

0 投票
2 回答
6446 浏览

android - AppWidget 中的进度条

我在 App Widget 中使用 ProgressBar 时遇到了一个有趣的情况……文档(http://developer.android.com/guide/topics/appwidgets/index.html)说 ProgressBar 是受支持的小部件类.. .

让 ProgressBar 显示在我的 App Widget 中没有问题,但问题是我希望它仅在后台处理发生时作为视觉反馈显示给用户。

在 ImageViews 上,我通过 RemoteViews.setViewVisibility() 执行此操作,一切正常。但是,对于 ProgressBar,我收到一个异常,说 ProgressBar 不能使用此方法。

这是故意的还是这是一个错误?有没有办法解决这个问题?

0 投票
4 回答
12704 浏览

android - Android - 如何经常更新小部件但仅在它可见时?

我将创建需要每分钟更新其内容的小部件(它显示与时间相关的数据)。

但是,如果小部件当前不可见,则无需更新小部件,这意味着:

  • 屏幕已关闭
  • 另一个应用程序正在运行
  • 小部件放置在另一个(不可见的)主屏幕选项卡上

每分钟只更新可见小部件的最佳方法是什么 - 无需唤醒设备或进行不必要的计算?小部件变得可见后,更新前的小延迟是可以接受的。

0 投票
1 回答
6642 浏览

android - 如何从 Android 中的 AppWidget 获取正确的 DisplayMetrics?

我需要在 Android AppWidget 中确定运行时的屏幕密度。我已经设置了一个 HDPI 仿真器设备 (avd)。如果设置一个常规的可执行项目,并将此代码插入 onCreate 方法:

这会按预期输出“屏幕密度 240”。

但是,如果我设置了一个 AppWidget 项目,并将此代码插入到 onUpdate 方法中:

这将输出“屏幕密度 160”。我注意到,连接调试器时,这里 Resources 对象的 mDefaultDisplay 成员在 AppWidget 案例中为空。

同样,如果我在运行时使用从 AppWidget 中的 context.getResources() 获得的 Resources 对象获取资源,它会根据屏幕密度返回错误的资源。例如,我有一个 60x60px 的 mdpi 可绘制对象和一个 80x80 的 hdpi 可绘制对象。如果我使用 context.getResources().getDrawable(...) 获取此 Drawable 对象,它会返回 60x60 版本。

有什么方法可以在运行时从 AppWidget 的上下文中正确处理资源?

谢谢!

0 投票
2 回答
10637 浏览

android - 如何从 android 主屏幕小部件启动活动

我拼命想弄清楚如何实现主屏幕小部件。现在,我(终于)能够在我的小部件上获得一个按钮来响应按钮按下,在清单中设置一个意图过滤器。

但是,我一生都无法弄清楚按下按钮时如何启动活动。基本上,这是我的代码:

不过,我真正想做的是开始一项新活动,而不是显示敬酒消息。我知道这与未决意图有关,但我不知道如何让它发挥作用。

任何帮助和示例代码将不胜感激。非常感谢回答这个问题的人!