Android Studio Arctic Fox开发小部件出现Problem Loading Widget问题求助
修复方案
需修改的4个核心问题:
- 小部件布局使用了RemoteViews不支持的
app:srcCompat属性,该属性属于AppCompat兼容库,桌面部件的RemoteViews仅支持安卓原生框架属性 QR_code_widget.java中更新部件时错误传入了全部id数组,而非当前遍历的单个部件id- Android 12及以上系统要求
PendingIntent必须显式声明可变性标志,原代码使用flag=0会触发异常 - 布局文件名与代码引用不一致:你提供的布局文件名为
activity_main.xml,但所有代码中引用的是R.layout.widget_layout,需统一命名
对应修改代码
1. 部件布局文件(统一文件名后修改内容)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageButton android:id="@+id/imageButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00FFFFFF" android:src="@drawable/qr_code_banner" tools:ignore="SpeakableTextPresentCheck" /> </RelativeLayout>
移除了app命名空间引用,将
app:srcCompat替换为原生android:src
2. QR_code_widget.java 修改
package com.mine.qrcode_widget; import android.annotation.SuppressLint; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.app.PendingIntent; import android.widget.RemoteViews; public class QR_code_widget extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); for (int appWidget : appWidgetIds) { Intent intent = new Intent(context, MainActivity.class); // 新增PendingIntent可变性标志,Android 12+要求 PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE); @SuppressLint("RemoteViewLayout") RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); views.setOnClickPendingIntent(R.id.imageButton, pendingIntent); // 修正参数:传入当前单个部件id而非整个数组 appWidgetManager.updateAppWidget(appWidget, views); } } }
3. 命名统一检查
确认你的布局文件名为widget_layout.xml,如果实际是activity_main.xml,请将上述代码中所有R.layout.widget_layout替换为R.layout.activity_main即可。
修改完成后卸载原应用重新安装即可正常显示小部件。
内容的提问来源于stack exchange,提问作者Stamina Overlook
相关产品推荐
相关产品推荐

