Articles of appwidgetprovider

在棉花糖升级后,appwidget listview行不会更新或加载

我有一个小部件应用程序,没有问题Android Lollipop或较低的操作系统。 当我将nexus 5升级到Marshmallow(android 6.0)时,我意识到我的小部件在加载自定义行列表视图时遇到问题。 Widget有一个动态textView和一个动态listView。 textView工作得很好; 但是listView行项目没有希望。 当我添加小部件时,行处于加载阶段。 它与Lollipop或更低版本的设备完全相同,但不适用于Marshmallow。 我相信棉花糖正在引发一个我无法find它的问题。 我希望有人告诉我我做错了什么并帮助我解决这个问题。 我很感激所有的帮助。 谢谢。 WidgetProvider.class: @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { System.out.println(“WidgetProvider.onUpdate()”); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); final boolean isMaviKart = MainUtils.getCardType(context).equals(Constants.CARD_TYPE_MAVI); try { //set widget id ComponentName thisWidget = new ComponentName(context, WidgetProvider.class); int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); MainUtils.setWidgetID(prefs, allWidgetIds[allWidgetIds.length – 1]); for […]

Widget中的图像

我试图在onUpdate中的窗口小部件布局中的图像视图中设置图像,但图像不更新 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Log.i(TAG, “onUpdate called”); for (int appWidgetId : appWidgetIds) { Bitmap bitmap=ImageUtils.getBitmap(context, appWidgetId); RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget); remoteView.setImageViewBitmap(R.id.imgView,bitmap); appWidgetManager.updateAppWidget(appWidgetId, remoteView); } } 小部件的xml布局 清单文件 widget_info.xml 但是当试图加载小部件时,我得到一个Toast“ App isnt installed ”,我没有显示任何这样的吐司从哪里来? 为什么图像没有设置,如何解决?

屏幕开启/关闭Android Oreo上的小部件的广播监听器

我有一个时钟小部件Android应用程序,我现在正在尝试更新到API 26要求。 到目前为止,我使用了一个后台服务,它在onCreate方法启动时注册了一个BroadcastReceiver来接收系统广播,例如android.intent.action.SCREEN_ON, android.intent.action.SCREEN_OFF, android.intent.action.TIME_SET, android.intent.action.TIMEZONE_CHANGED 。 然后,当屏幕关闭时,此服务暂停时钟,并在屏幕重新打开时将其唤醒以节省电池电量。 在Oreo中,这种服务似乎不是一种选择,因为它必须在前台运行,并且通知对用户来说真的没有意义。 另外,就我在文档中看到的那样, JobScheduler也无法帮助我,因为我还没有发现可以在屏幕打开时安排作业。 我尝试在AppWidgetProvider类中创建一个BroadcastReceiver ,并在AppWidgetProvider的onUpdate方法中注册它以接收所述系统广播。 这很好用,广播确实收到,但只有在屏幕保持关闭一段时间之后; 之后,似乎应用程序以某种方式被系统杀死,或者在没有任何报告错误或崩溃的情况下停止工作; 但是,如果我点击它,它将正常打开配置活动。 我的问题: 如果我不想运行前台服务,如何在API 26+上正确收听屏幕开/关广播? 是否有可能从AppWidgetProvider类本身监听系统广播,通过在其中注册BroadcastReceiver ,或甚至注册AppWidgetProvider本身来接收系统事件(无论如何AppWidgetProvider是BroadcastReceiver的扩展)。 为什么我的AppWidgetProvider在一段睡眠期后显然会停止接收广播的系统意图? 编辑: 我在registerReceiver方法的Android文档中find了以下内容,这似乎是我的问题2和3的答案。 注意:无法从BroadcastReceiver组件调用此方法; 也就是说,来自在应用程序清单中声明的​​BroadcastReceiver。 但是,从另一个已经在运行时使用registerReceiver(BroadcastReceiver,IntentFilter)注册的BroadcastReceiver调用此方法是可以的,因为这样的已注册BroadcastReceiver的生命周期与注册它的对象相关联。 我会得出结论,我在AppWidgetProvider使用和注册BroadcastReceiver与此规范相反。 我将保留这篇文章,因为其他人可能会发现这些信息有用,我的问题1仍然有效。

appWidget仅显示在棒棒糖设备的启动器小部件列表中

我有一个Android应用程序,我已经在棒棒糖之前为它做了一个appwidget,由于某些原因,小部件没有出现在棒棒糖中。 然而,它出现在前棒棒糖设备中。 这是我的代码: AndroidManifest.xml中 > news_info.xml NewsWidgetProvider.java public class NewsWidgetProvider extends AppWidgetProvider { private static final String NEXT_NEWS = “NEXT_NEWS”; private static final String PREVIOUS_NEWS = “PREVIOUS_NEWS”; private static final String GO_TO_NEWS_ACTIVITY = “GO_TO_NEWS_ACTIVITY”; private final String NEWS_LIST_KEY = “newsList”; NewsItem[] news; int currentNews=0; Bitmap imageBitmap; private final String CURRENT_NEWS_KEY = “currentNews”; @Override public void […]

appwidget冻结并拒绝更新:忽略updateAppWidget

所以我有一个很好的刷新应用程序小部件,定期将新的位图加载到ImageView ,就像发条一样。 然后,在某个时候,默默地,它会停止更新。 我可以从日志和我的代码正在查询的服务器上的活动中看出,小部件实际上仍在继续定期触发(通过onReceive()捕获的广播,并按预期执行其操作。唯一的事情是发生的事情是小部件内容没有更新。 因此,在小部件触发时执行的代码中,我正在创建一个新的RemoteView并向其添加内容,包括通过remoteViews.setImageViewBitmap(imageViewID, bmp)加载新的位图,然后最终调用appWidgetManager.updateAppWidget(appWidgetId, remoteViews)更新小部件内容。 很好地工作……直到它停止工作。 我不确定要发布什么代码,因为99%的情况下它可以正常工作,但偶尔updateAppWidget()停止工作,原因并不明显。 看起来这是一个系统问题,而不是我的代码中的错误,但我可能是错的。 唯一似乎可能提示这一点的是当连接发生变化时,例如从无信号到WiFi,可能经常发生这种变化。 在这些情况下似乎发生了更多。 一旦小部件冻结,唯一解冻它的是重启设备。 如果不重新启动,即使删除小部件并添加新小部件也不起作用。 实际上,添加一个新的小部件会导致死小部件甚至不响应单击以打开Config Activity,可能是因为RemoteViews其他内容都忽略了remoteViews.setOnClickPendingIntent(R.id.widget, configPendingIntent)我仔细构造并发送到appWidgetManager.updateAppWidget() 。 它似乎与其他许多人所描述的非常相似: https://code.google.com/p/android/issues/detail?id=28216 而目前似乎没有已知的治疗方法。 https://code.google.com/p/android/issues/detail?id=28216#c56上的post似乎提供了一些承诺,但我尝试在各个地方调用AppWidgetHost.startListening() ,包括定期间隔通过重复警报,看看我是否可以启动小部件,但似乎没有任何工作。 其他用户(而不是开发人员)似乎也看到了这个问题: http : //androidforums.com/threads/clock-widget-keeps-freezing-please-help.530333/ 有任何想法吗? 它正在慢慢地让我发疯!

小部件未出现在小部件列表中

我在stackoverflow上读过几个关于这个的问题,但没有一个答案能解决我的问题。 我正在尝试向我的应用添加主屏幕小部件,我的小部件不会出现在Android的小部件列表中。 我尝试重启设备 ,重新安装应用程序,更改配置文件中的参数,确保SD卡上没有安装应用程序。 没有什么工作。 这是我目前的代码: 在AndroidManifest.xml的应用程序标签内: 在/res/xml/gulp_widget_info.xml里面: 在/res/layout/layout_widget.xml里面: 在/java/info/andrewdahm/gulp/GulpWidgetProvider.java中: public class GulpWidgetProvider extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { final int N = appWidgetIds.length; // Perform this loop procedure for each App Widget that belongs to this provider for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; […]

Android小部件未更新 – 具有不正确的小部件ID

我一直在研究一个小部件并取得一些进展(我希望),但仍然无法让它做我想要的。 我有一个配置器活动,可以正常工作。 当它关闭时,我调用WordWidget类中的updateAppWidget方法,小部件更新随机数。 由于onClick,我无法做到的是随机数改变。 根据日志,我输入onReceive()方法,但这就是它。 在日志中我打印小部件ID。 我注意到,当从配置器活动运行时,它打印appWidgetId = 33,但是当我按下小部件时,它打印appWidgetId = 24。 这是代码: public class WordWidget extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { //This is run when a new widget is added or when the update period expires. Log.v(“wotd”, “In onUpdate(), updating ” + appWidgetIds.length + ” widgets”); Log.v(“wotd”, ” […]

如何使用活动中的列表视图更新App Widget

我知道这已被多次询问,但我从上到下阅读了文档,在这里阅读了所有答案,但没有一个帮助。 说实话,每个答案都说明了如何解决这个问题。 现在回到我的问题。 我想从一些活动更新小部件列表视图,我WidgetProvider#sendUpdateBroadcastToAllWidgets()创建了WidgetProvider#sendUpdateBroadcastToAllWidgets() ,我从活动中调用了它。 它最终调用onUpdate()以便正确接收广播。 但意见没有刷新。 我还尝试调用AppWidgetManager#notifyAppWidgetViewDataChanged()并刷新WidgetFactory#onDataSetChanged()的数据,但该方法从未被调用过。 所以我猜这一切都行不通,因为远程视图工厂被缓存但我不知道如何可靠地克服这一点。 有什么想法吗? 那些背景呢? 我总是要提供一个,但我真的不在乎哪一个。 有关系吗? 谢谢 提供商 public class WidgetProvider extends AppWidgetProvider { public static void sendUpdateBroadcastToAllWidgets(Context context) { int allWidgetIds[] = AppWidgetManager.getInstance(context).getAppWidgetIds(new ComponentName(context, WidgetProvider.class)); Intent intent = new Intent(context, WidgetProvider.class); intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds); context.sendBroadcast(intent); } @Override public void onUpdate(Context context, AppWidgetManager widgetManager, int[] widgetIds) { for […]

Android小部件在模拟器中运行良好,但在手机上它变成了Google App小部件

我创建了一个Android小部件。 在运行Android 4.4.4的Genymotion Nexus 4模拟器中,一切运行良好。 在我运行Android 4.4.4的Nexus 4设备上,我将小部件放在主屏幕上,它变成了Google App小部件。 然后它变成我的小部件然后再次进入Google App小部件,依此类推。 它执行此操作直到我从主屏幕中删除小部件。 此外,我使用parse.com作为在线存储,在我的手机上似乎没有获得数据。 我无法确切地说出因为小部件不断变化。 我的小部件包含3个文件。 一个扩展应用程序类: public class MyApp extends Application { private MyModel model; @Override public void onCreate() { Parse.enableLocalDatastore(this); ParseObject.registerSubclass(GdbdData.class); Parse.initialize(this, “-“, “-“); if(model == null) { Intent intent = new Intent(this,GdbdWidgetProvider.class); intent.setAction(WidgetUtils.WIDGET_REFRESH_STORAGE); intent.putExtra(“userId”,123); sendBroadcast(intent); } super.onCreate(); } 一个WidgetProvider: @Override public void onReceive(Context […]

Android:将WebView输出加载到App Widget中

虽然我很欣赏App Widget不直接支持WebView ,但是它是否可以使用ImageView (支持它),以及这里描述的技术为ImageView生成图像? WebView不会直接使用,而只会在后台使用,以便为ImageView提供图像。