Articles of appwidgetprovider

屏幕开启/关闭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提供图像。

appWidget只能在棒棒糖设备的启动器窗口小部件列表中显示

我有一个Android应用程序,我已经做了一个appwidget之前棒棒糖,由于某些原因小部件不出现在棒棒糖。 不过,这是在棒棒糖前的设备中出现的。 这是我的代码: AndroidManifest.xml中 <receiver android:name=".widgets.NewsWidgetProvider" android:icon="@drawable/ic_launcher" android:label="@string/app_name" >> <intent-filter > <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/news_info" /> </receiver> news_info.xml <?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/widget_news" android:minHeight="72dp" android:minWidth="300dp" android:updatePeriodMillis="6000000" > 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 […]

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

所以我有一个很好的刷新的应用程序小部件,像发条一样定期将一个新的位图加载到ImageView 。 然后,在某个时刻,静静地,它将停止更新。 我可以从日志和从我的代码所查询的服务器上的活动中知道,这个小部件实际上仍然在继续定期onReceive()通过onReceive()捕获的广播,并且按照预期的方式执行它的东西。发生的事情是小部件内容不更新。 因此,在部件激发的代码中,我创build了一个新的RemoteViews并添加了一些东西,包括通过remoteViews.setImageViewBitmap(imageViewID, bmp)加载一个新的位图,最后调用appWidgetManager.updateAppWidget(appWidgetId, remoteViews)来更新小部件内容。 很好地工作…直到停止工作。 我不知道要发布什么代码,因为99%的时间都可以正常工作,但偶尔updateAppWidget()停止工作,没有明显的原因。 似乎这是一个系统问题,而不是我的代码中的错误,但我可能是错的。 似乎可能提示的唯一情况是当连接有变化,例如从无信号变为WiFi,可能频繁发生这样的变化。 在这种情况下似乎更多。 而一旦小部件冻结,解冻它唯一的东西是重新启动设备。 不重新启动,即使删除小部件,并添加一个新的不起作用。 事实上,添加一个新的会导致一个死的小部件,甚至没有响应点击来打开configuration活动,大概是因为remoteViews.setOnClickPendingIntent(R.id.widget, configPendingIntent)被忽略像在RemoteViews其他一切我仔细构build并发送到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() ,包括常规间隔通过重复报警,看看我是否可以kickstart小部件,但似乎没有任何工作。 而其他用户(而不是开发人员)似乎也看到这个问题: http : //androidforums.com/threads/clock-widget-keeps-freezing-please-help.530333/ 有任何想法吗? 这正在慢慢地让我发疯