如何解决Android App Widget BroadcastReceiver 在升级后停止工作
我刚刚创建了一个简单的应用程序 Widget
,并让它在使用 Toast
点击其 ImageView
时显示一条 BroadcastReceiver
消息。
问题是,在我对代码进行一些更改(例如更改 Toast
的文本)并重新安装后,我再次单击该 ImageView
, Activity
弹出,而不是 Toast
消息。换句话说,在我的应用升级后,以前存在的应用 Widget
不再像以前那样工作了。
应用小部件布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:padding="@dimen/widget_margin"
android:theme="@style/ThemeOverlay.WidgetTest.AppWidgetContainer">
<ImageView
android:id="@+id/widget_name_imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/sam" />
</LinearLayout>
小部件类:
class NameWidget : AppWidgetProvider() {
override fun onUpdate(context: Context,appWidgetManager: AppWidgetManager,appWidgetIds: IntArray) {
for (appWidgetId in appWidgetIds) {
updateAppWidget(context,appWidgetManager,appWidgetId)
}
}
override fun onEnabled(context: Context) {
}
override fun onDisabled(context: Context) {
}
}
internal fun updateAppWidget(context: Context,appWidgetId: Int) {
val views = RemoteViews(context.packageName,R.layout.name_widget)
val intent = Intent(context,NameReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(context,intent,0)
views.setOnClickPendingIntent(R.id.widget_name_imageView,pendingIntent)
appWidgetManager.updateAppWidget(appWidgetId,views)
}
广播接收器类:
class NameReceiver : BroadcastReceiver() {
override fun onReceive(context: Context,intent: Intent) {
Toast.makeText(context,"hahaha",Toast.LENGTH_SHORT).show()
}
}
AndroidManifest(关键部分):
<receiver android:name=".NameWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/name_widget_info" />
</receiver>
<receiver
android:name=".NameReceiver"
android:enabled="true" />
我没有对 widget_info
xml 文件进行任何更改。任何帮助将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。