通过 AppWidgetManager 更新我自己的小部件时,电源控制小部件会短暂显示,有什么问题吗?

2023-11-22

我通过 AppWidgetManager.updateAppWidget 手动更新小部件时遇到问题。 平台是Android 2.2。

这是代码:
我在清单中将小部件附加到现有活动中声明:

<receiver android:name=".Widget" 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/widget" />
</receiver>

小部件类在 Widget.java 中声明:

public class Widget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    int use_static_ip;
    RemoteViews remoteViews;

    try {
        use_static_ip = Settings.System.getInt(context.getContentResolver(), Settings.System.WIFI_USE_STATIC_IP);
        if (use_static_ip == 0) { //DHCP
            remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_dhcp);
        } else { //static IP
            remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_static);
        }
        Intent call_activity = new Intent(context, StaticIPToggle.class);
        PendingIntent pending_call_activity = PendingIntent.getActivity(context, 0, call_activity, 0);
        remoteViews.setOnClickPendingIntent(R.id.widget_icon, pending_call_activity);
        appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
    } catch (SettingNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

在现有活动中,我添加了一些行来手动更新小部件:

        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
        ComponentName componentName = new ComponentName(getApplicationContext(), Widget.class);
        int[] ids = appWidgetManager.getAppWidgetIds(componentName);
        Intent update_widget = new Intent();
        update_widget.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
        update_widget.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        getApplicationContext().sendBroadcast(update_widget);

但现在我有这个错误: 如果单击小部件,它会在显示所需小部件之前短暂显示能量设置小部件(~0.5 秒-1 秒)。

这是此问题的屏幕截图(从左到右的顺序):https://i.stack.imgur.com/rHkjw.jpg

首先是左图所示的小部件,然后更改为中间图片,并在大约 0.5-1 秒后停留在那里或更改为右图。

不幸的是我看不到代码中有任何错误,你呢?

希望你能帮助我解决这个问题;) 提前致谢, 问候,奥利


我有完全相同的问题。我通过手动更新小部件解决了这个问题,而不是通过广播,而是直接调用AppWidgetManager.updateAppWidget(ComponentName, RemoteViews)相反,来自 AsyncTask。

在您的 Widget 类中尝试一下:

/**
 * Asynchronously builds views and updates the widget.
 */
private static class UpdateWidgetTask extends AsyncTask<Void, Void, RemoteViews> {
    private AppWidgetManager mAppWidgetManager;
    private Context mContext;

    private UpdateWidgetTask(AppWidgetManager appWidgetManager, Context context) {
        mAppWidgetManager = appWidgetManager;
        mContext = context;
    }

    @Override
    protected RemoteViews doInBackground(Void... params) {
        DebugLog.d(TAG, "Asynchronously updating widget.");
        RemoteViews views = buildUpdate(mContext);
        return views;
    }

    @Override
    protected void onPostExecute(RemoteViews views) {
        ComponentName thisWidget = new ComponentName(mContext, Widget.class);
        mAppWidgetManager.updateAppWidget(thisWidget, views);
    }
}

/**
 * Asynchronously updates all widgets of this type. This is the fastest way to update the widget.
 *
 * @param context The context.
 */
public static void updateWidget(Context context) {
    new UpdateWidgetTask(AppWidgetManager.getInstance(context), context).execute();
}

然后通过从您的活动中调用 Widget.updateWidget(this) 进行更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 AppWidgetManager 更新我自己的小部件时,电源控制小部件会短暂显示,有什么问题吗? 的相关文章

  • 排除jar中的文件进入apk

    我最近添加了一些新的罐子到我的android项目 一些 jar 包含 version properties 其中之一甚至包含 README TXT 我如何告诉 eclipse adt ant 排除文件进入 apk 显然我可以解压 apk 删
  • Android:如何测试自定义视图?

    Android 中有多种单元测试方法 测试我编写的自定义视图的最佳方法是什么 我目前正在将其作为仪器测试用例活动的一部分进行测试 但我宁愿只测试孤立的视图 对于缺乏以视图为中心的测试用例实现的一个简单解决方案是在包含视图的测试项目中创建一个
  • 进入沉浸式全屏模式时状态栏为白色

    我根据以下内容做了一个关于沉浸式全屏模式的简单项目使用沉浸式全屏模式 https developer android com training system ui immersive html But first of all it per
  • Android ViewPager + 带有动态 ListView 的 Fragments

    在我的应用程序中 我有带有选项卡的活动 假设有 10 个选项卡 每个标签页包含Fragment with ListView 此 ListView 中显示的数据是从我的服务器动态加载的 我用ViewPager显示这些页面 我不想保留所有Fra
  • 如何更新不是我自己创建的 APK 的版本

    我是 Android 开发新手 我正在使用 x 平台开发工具 它为我构建并签署 APK 该工具有一个错误 它不会使用我指定的版本代码生成 APK 所有生成的 APK 都是版本 1 0 我想解压APK 编辑版本代码 然后辞职并重新打包 它最初
  • 无法解析符号“AuthUI”

    我正在添加 firebase google 和 Gmail 登录 但是当我粘贴代码时 onAuthStateChanged NonNull FirebaseAuth firebaseAuth 方法我收到此错误 无法解析符号 AuthUI 在
  • 如何刷新 Android 上的 MediaStore?

    这最初是 Android 论坛上的一个一般用户问题 然而 它必然成为一个编程问题 这是我的问题 Android 有一个服务 MediaScanner 每当 我相信 SD 卡卸载和重新安装时它都会在后台运行 该服务收集卡上所有媒体文件的数据
  • 安卓写入文件

    经过几周的不编程之后 我决定完成我的应用程序 上次我无法进行文件写入和读取 现在我想做 我也许可以使用数据库 但这似乎容易得多 我已经发现this http narenst wordpress com 2010 01 25 android
  • 单元测试定位服务

    我有一个位置跟踪服务 正在尝试对其进行单元测试 我正在尝试使用 locationManager addTestProvider 和 setTestProviderLocation 方法来实现此目的 但是 我似乎无法通过提供程序获取任何位置并
  • 动态添加的 RemoteView 上的布局权重

    在我的小部件中 我使用以下内容将项目 R layout widget item 动态添加到我的主小部件布局中定义的 LinearLayout 中 Main widget layout RemoteViews views new Remote
  • 片段和通知:针对通知中的不同活动;取决于屏幕配置

    问题 如何决定做什么Activity a Notification如果目标可能取决于配置 屏幕尺寸 方向等 则应启动 就像人们使用时经常出现的情况一样Fragments Details 让我们考虑一下新闻阅读器示例 http develop
  • adb 无法启动守护进程,CreateProcess 失败,错误 2

    我无法运行adb root或任何 adb 命令 我收到以下错误 我设置ADB TRACE 1 C WINDOWS system32 gt adb root system core adb adb c main Handling comman
  • 三星 Galaxy Note 上的布局

    我有一个奇怪的问题 只出现在 Samsung Galaxy Note 上 我有横向和纵向布局 正常和大 如下 http developer android com guide practices screens support html h
  • 滑动抽屉上的按钮? - 安卓

    好吧 我已经在我正在构建的 Android 应用程序中的滑动抽屉上实现了一个按钮 唯一的问题是 当我按下按钮时 整个滑动抽屉都会被按下并向上滑动 我知道我可以在 XML 中禁用 按向上滑动 但这似乎不起作用 因为滑动抽屉仍然在没有向上滑动的
  • 具有 jsonObject 的 android 列表视图

    我正在开展一项活动 该活动请求服务器上的一个 php 文件 此 php 文件将返回给我一个JSONArray having JSONObjects作为它的元素 我明白了jArray并提取其内容 例如所有jsonObjects 每个 json
  • 从包中获取参数

    我正在尝试将参数从我的活动传递到片段 并且我正在使用以下代码 Override protected void onCreate Bundle savedInstanceState super onCreate savedInstanceSt
  • FirebaseAuth.getInstance().signOut() 不注销

    我尝试从 firebase 注销用户 但在关闭应用程序并再次打开后 用户仍然处于连接状态 我尝试从 firebase 定期注销用户 但没有解决问题 我想知道是什么导致了这个问题 logout setOnClickListener new V
  • 如何获取任何已安装 Android 应用程序的清单权限

    是否可以获得任何已安装的 Android 应用程序的清单权限 感谢您的提示 让它运行 final Intent mainIntent new Intent Intent ACTION MAIN null mainIntent addCate
  • Android:将“内部”链接添加到 TextView 的一部分,该链接链接到我的代码中的操作

    正如标题所解释的 我想添加链接到我的TextView 有这两个警告 我希望链接能够作用于TextView 不是完整的 类似于AHTML 中的锚点 我希望链接指向我的代码中的操作 而不是网站 我可以在我的活动中定义一个方法 或者实现一个OnC
  • Firebase 令牌未生成

    我得到的令牌未生成 onTokenrefresh 没有调用 谁能帮忙 它已连接到 firebase 但令牌仍然没有生成 public class MyFireBaseInstanceId extends FirebaseInstanceId

随机推荐