处理 appwidget 的多个实例

2024-02-16

我有一个配置活动、一个大型小部件提供程序和一个小型小部件提供程序。在配置活动中,我在共享首选项中保存了一些值。我从大大小小的应用程序小部件提供商那里获得了这些共享的偏好。我无法为应用程序小部件提供唯一的 ID,并且每次从配置活动转到应用程序小部件提供程序时,我都希望有不同的共享首选项。我怎样才能做到这一点。


要为应用程序小部件的每个实例提供唯一的小部件 ID,您可以执行以下操作:

    AppWidgetManager appWidgetManager = AppWidgetManager
                .getInstance(ConfigurationActivity.this);
    ComponentName thisAppWidget = new ComponentName(
                ConfigurationActivity.this, WidgetProvider.class);
    int[] appWidgetIds = appWidgetManager
            .getAppWidgetIds(thisAppWidget);
    Intent startBroadcast = new Intent(ConfigurationActivity.this,
                WidgetProvider.class);
    startBroadcast.putParcelableArrayListExtra("list", newsList);
    startBroadcast.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,
                appWidgetIds);
    startBroadcast.setAction("android.appwidget.action.APPWIDGET_UPDATE");
        sendBroadcast(startService);

为了将数据保存在唯一的共享首选项中,您可以执行以下操作:

    public void setWidgetNewsCategory(Context context, String category,
        int appWidgetId) {

    Editor editor = context.getSharedPreferences(
            PREFS_NAME_CATEGORY + String.valueOf(appWidgetId),
            Context.MODE_PRIVATE).edit();
    editor.putString(PREFS_VALUE_CATEGORY + String.valueOf(appWidgetId),
            category);
    editor.commit();
}

您可以按如下方式检索此共享首选项值:

     public String getWidgetNewsCategory(Context context, int appWidgetId) {
     SharedPreferences sharedPreferences = context.getSharedPreferences(
            PREFS_NAME_CATEGORY + String.valueOf(appWidgetId),
            Context.MODE_PRIVATE);
    return sharedPreferences.getString(
            PREFS_VALUE_CATEGORY + String.valueOf(appWidgetId), null);
}

最后,在 Widget Provider 的 onReceive 方法中,执行以下操作:

public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
        Bundle extras = intent.getExtras();
        if (extras != null) {
            int[] appWidgetIds = extras
                    .getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);             
            if (appWidgetIds.length > 0) {
                this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);//here you can call onUpdate method, and update your views as you wish
            }
        }
    } else if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
        Bundle extras = intent.getExtras();
        if (extras != null
                && extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_ID)) {
            final int appWidgetId = extras
                    .getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
            this.onDeleted(context, new int[] { appWidgetId });
        }
    } else if (AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)) {
        this.onEnabled(context);
    } else if (AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)) {
        this.onDisabled(context);
    }
}

这只是对我有用的一般解决方案。希望它也对你有用。

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

处理 appwidget 的多个实例 的相关文章

  • 意图?如何注册以获得传入电子邮件提醒?

    这里是极限 Android 开发新手 好吧 Android 开发新手 而不是一般开发 我想编写一个应用程序 当电子邮件进入设备时会收到通知 并根据电子邮件中的数据 主题 发件人 收件人等 采取各种操作 我认为我要做的是创建一个带有 Inte
  • 处理 Android 锁屏上的音量变化?

    我想做的是 能够在 android 4 4 上的锁屏上捕获音量增大 减小按钮操作 Google Cast 设计清单 https developers google com cast docs design checklist sender
  • Android自定义控件命名空间问题

    我一直在为 Android 开发自定义控件 尽管我尝试按照建议进行操作here https stackoverflow com questions 4495511 how to pass custom component parameter
  • 如何使用retrofit2进行GET请求?

    我有一个在本地主机上运行的安静的 Web 服务 我想在该剩余 URL 上发出 Retrofit2 GET 请求 MainActivity java private void requestData public static final S
  • 维护 HttpUrlConnection 调用之间的会话(Native/Webview)

    让我从我做的开始desire 我想制作一个应用程序part native and part webviews Problem 维护本机和 webview 部分之间的会话 My 处理方法 this 我打算实现一个本机登录 其中我向用户展示两个
  • Android 5.0 Lollipop 中屏幕固定关闭时如何收到通知?

    我有一个在后台运行的应用程序 并在手机上发生特定事件时启动活动 我发现在 Android 5 0 中 当用户使用另一个应用程序打开屏幕固定时 startActivity intent 调用将被完全忽略 我的应用程序不知道该活动尚未启动 因此
  • FLAG_ACTIVITY_REORDER_TO_FRONT 被忽略

    我有一个包含项目列表的 FragmentActivity 当应用程序处于后台时 可以推送该项目列表 发生这种情况时 我想创建一个状态栏通知并提醒用户更新 当用户单击通知时 活动应重新排序到前面并显示在屏幕上 同时在列表底部显示新项目 所以我
  • Android 谷歌地图 V2 已停止

    我正在尝试构建地图应用程序并关注这个链接 https blog emildesign rhcloud com p 435一步步 我在这里找到了类似的主题 但对我没有帮助 我想显示地图 但是当我运行它时 它返回强制关闭和我的 Android
  • 需要在 Android 中伪造正在扫描的 NFC 标签

    好的 我有一个应用程序 此应用程序仅在扫描 NFC 标签 任何标签 时才会完成任务 唯一的问题是 我没有任何 nfc 标签 无论如何 我正试图消除对卡的需要 所以我需要的是一种 伪造 使其看起来 就像已扫描 nfc 标签的方法 我可以编写应
  • 在 Android 中始终以横向模式打开相机

    在我的 Android 应用程序中 单击按钮后我希望相机以横向模式打开 即使我将手机旋转为纵向模式 相机也应始终处于横向模式或纵向模式 使用此代码在横向模式下打开相机 Intent cameraIntent new Intent Media
  • 使用 RxJava 限制吞吐量

    我现在遇到的情况很难解释 所以我会写一个更简单的版本来解释这个问题 我有一个Observable from 它发出一系列由ArrayList文件数量 所有这些文件都应上传到服务器 为此 我有一个函数可以完成这项工作并返回一个Observab
  • 使用 mupdf android 库导航到特定页面

    我如何使用 muPDF 库导航到特定页面 或者有没有办法让图书馆不记得我最后在那个pdf文件中浏览的是哪一页 Uri uri Uri parse path Intent intent new Intent MainActivity getC
  • 如何使用 Swipe 视图实现 Android TabLayout 设计支持库

    我将使用 android TabLayout 设计支持库 但我不知道如何使用滑动视图 这是我的代码 XML
  • android 多关键词搜索

    我的应用程序包含搜索功能 它将搜索数据库内的内容 我的搜索的弱点是 我只能使用一个标签进行搜索 例如我只能搜索 猫 它会返回我的数据库中包含 猫 一词的内容 因为我正在使用LIKE在 select 语句期间进行查询 如何使用多个标签进行搜索
  • Android 消费品:“已经拥有该商品”,但 inventory.hasPurchase() 为 false

    我被 Google In App v3 困住了 我测试了一次没有消费的购买 例如 当应用程序在购买和消费之间崩溃时 现在我找不到出路 如果我尝试再次购买 它会显示 您已经拥有该商品 但是当我测试所有权时 它说我不拥有它 Inventory
  • 使用 UPI url 调用 PSP 应用程序

    我正在尝试创建一个商家应用程序 它将根据 NPCI 的指南生成一个 url 此 url 将作为意图共享 并且 PSP 应用程序 任何注册的银行应用程序 应该能够侦听该 url 并被调用 我已经形成了这样的网址 upi pay pa icic
  • SDK尚未初始化,请务必先调用FacebookSdk.sdkInitialize()

    我在实现 Facebook SDK 时遇到此错误 并且我tried https stackoverflow com questions 15490399 error inflating class com facebook widget l
  • Android 4.2 - Environment.getExternalStorageDirectory().getPath() 行为

    我一直在开发一个android应用程序 在上次更新到4 2之前 我使用 Environment getExternalStorageDirectory getPath 它返回了我 storage sdcard0 但自从更新后我现在得到了 s
  • 动态创建 JSON 对象

    我正在尝试使用以下格式创建 JSON 对象 tableID 1 price 53 payment cash quantity 3 products ID 1 quantity 1 ID 3 quantity 2 我知道如何使用 JSONOb
  • Android Espresso - 如果未选中,请单击复选框

    I have onView withId R id check box perform click 但我只想在尚未选中该复选框时执行此操作 我怎样才能在浓缩咖啡中做到这一点 我还想根据其之前的状态来切换复选框 开关 起初 我尝试用此方法打开

随机推荐

  • 将两种不同的颜色设置为单个容器

    I am trying to achieve a custom design dynamically from my button I have designed this button from a Container with InkW
  • “硬编码”用户代理足以让程序在多台计算机上运行吗?

    我在用着idHttp登录到一些网站并下载一些文件 我想知道因为我的程序将在具有不同窗口和软件的多台计算机上运行 例如当我说 idHttp userAgent Mozilla 5 0 Windows NT 6 1 WOW64 AppleWeb
  • 使用 pandas.to_csv 时如何指定日期格式?

    默认输出格式为to csv is 12 14 2012 12 00 00 AM 我不知道如何仅输出特定格式的日期部分 20121214 或 csv 文件中两个单独列中的日期和时间 20121214 084530 该文档太简短 无法为我提供有
  • PostgreSQL 中 json 数组值的交集

    在 PostgreSQL 9 4 中 我有一个这样的表 id array json 1 type single field id 9 type range field id 2 2 type single field id 10 type
  • 如何保持数据库表中记录的顺序

    我正在创建一个数据库表 该表将存储最终将显示在网页上的菜单链接 我的问题是我想控制菜单项的顺序 我可以有一个名为 order 的字段 但每次我有一个新的菜单链接时 我都必须插入 order 并将所有具有更高 order 的记录更改为 1 例
  • 使用 Pandas 读取 csv 时如何指定时区信息

    我有一个 csv 文件 其时间戳以 CAT 中非时间 给出 当我使用以下方法将其作为 pandas 数据框读入时 df pd read csv path parse dates timestamp dayfirst True 我收到错误 C
  • Visual Studio 2010 中的 2008 年商业智能项目(SSIS 和 SSRS)

    我必须安装什么才能从 Visual Studio 2010 创建 SQL 商业智能项目 例如 Report Services 报表和集成服务包 我是否能够创建同时适用于 SQL 2005 和 SQL 2008 的解决方案 我尝试在客户端上安
  • 如何返回最早日期的记录?

    我需要返回每个不同学生 ID 的第一条记录 在我的示例代码中 我有一个记录在同一日期发生了两个事件 而另一名学生在不同日期发生了多个事件 我需要选择最早的日期 如果同一日期发生多个事件 则将最早的事件 ID 作为下一个标准 有什么好的方法可
  • Google 地图 api - 将标记捕捉到最近的道路

    我正在尝试将坐标捕捉到最近的道路 但我仍然无法以简单的方式做到这一点 这是简单的代码 如何改进它 结果将在路上标记
  • 如何仅在 Nuxt.js 中加载客户端资源

    我正在尝试在 Nuxt js 之上使用 Tone js 构建一个应用程序 Tone js 需要浏览器的 Web Audio API 并且当 Nuxt 在服务器端渲染内容时 我的构建不断失败 Nuxt 在中解决了这个问题插件文档 https
  • 消除 Maven POM 冗余

    我有一个具有以下配置的父 POM
  • 蓝牙 LE (4.0) 有多少个中央设备可以连接到外围设备?

    我想知道一个外围设备可以同时连接多少个中心 我的问题是针对 iOS 的 但我希望得到大家的答复 有几件事 我知道中央设备 而不是外围设备 旨在处理多个连接 然而 出于各种原因 我想尝试相反的设置 来自蓝牙核心规范 V4 外围角色针对支持单一
  • django-导入-导出外部管理

    我正在尝试使用 django import export 实现简单的 xls 文件导入并保存到模型 不幸的是 这些文档仅涵盖管理集成 我被困在我的示例代码中 class UploadFileForm forms Form file form
  • 如何从 Core Data 的持久存储中删除所有对象?

    我的应用程序中有核心数据 因此 我获取一个 XML 文件 将数据解析为模型对象并将它们插入到核心数据中 它们保存在持久存储中 当我重新启动应用程序时可以访问它们 但是 我希望能够随意刷新持久存储中的数据 因此我需要首先从存储中删除现有对象
  • 如何使用 client_credentials 从资源服务器访问另一个 oauth2 资源?

    我想使用 client credentials 从反应性资源服务器访问另一个受 oauth2 保护的资源 我使用颁发的令牌访问资源服务器的部分正在工作 但没有使用 webclient 调用其他资源 使用 UnAuthenticatedSer
  • 如何在 Eiffel 中格式化 DOUBLE 以仅打印两位小数?

    在埃菲尔铁塔中 你如何做到这一点 118 1999999999999 打印到 118 20 在其他语言中 这只是 printf 的问题 但在 Eiffel 中似乎没有办法轻松做到这一点 您应该使用类 FORMAT DOUBLE local
  • 对不同的 Android 应用程序使用一个 Google 地图 API 密钥

    我刚刚生成了要在我的 Android 应用程序中使用的 Google 地图 API 密钥 我必须提供应用程序的 SHA 1 指纹和包名称 它看起来像这样 BB 0D AC 74 D3 21 E1 43 67 71 9B 62 91 AF A
  • 计算两个日期之间的星期几小时对

    考虑以下列表星期几小时配对24H format Mon 9 23 Thu 12 13 14 Tue 11 12 14 Wed 11 12 13 14 Fri 13 Sat Sun 和两个时间点 例如 Start datetime datet
  • ffmpeg 给出错误选项 movflags not find

    在 Ubuntu 12 04 LTS 中我使用过 movflags frag keyframe empty moov在我的 ffmpeg 命令中 ffmpeg i http filesbe vocativ internal net 03 4
  • 处理 appwidget 的多个实例

    我有一个配置活动 一个大型小部件提供程序和一个小型小部件提供程序 在配置活动中 我在共享首选项中保存了一些值 我从大大小小的应用程序小部件提供商那里获得了这些共享的偏好 我无法为应用程序小部件提供唯一的 ID 并且每次从配置活动转到应用程序