桌面小部件(Appwidget)的列表ListView点击启动Activity失败的解决方案

1、问题现象

在这里插入图片描述

点击列表项ItemView启动startActivity始终没反应。

原来的老版本写法如下:

//RemoteViewsFactory类
 override fun getViewAt(position: Int): RemoteViews? {

        val fillInIntent = Intent()
        //item点击时传递的参数
        fillInIntent.putExtra(FullTextActivity.EXTRA_BEAN, listData[position])
        rv.setOnClickFillInIntent(R.id.itemText, fillInIntent)
        return rv
}
//AppWidgetProvider类
override fun onUpdate( context: Context,  appWidgetManager: AppWidgetManager,  appWidgetIds: IntArray ) {
        val clickIntent = Intent(context, WidgetProvider::class.java)
        clickIntent.action = clickAction
        clickIntent.data = Uri.parse(clickIntent.toUri(Intent.URI_INTENT_SCHEME))
        //关键就是这一行
        val pendingIntentTemplate = PendingIntent.getBroadcast(context, 0, clickIntent,PendingIntent.FLAG_UPDATE_CURRENT)
        remoteViews.setPendingIntentTemplate(R.id.list_view, pendingIntentTemplate)
}

override fun onReceive(context: Context, intent: Intent) {
        super.onReceive(context, intent)

        val action = intent.action
        when (action) {
            clickAction -> {
                val toIntent = Intent(context, FullTextActivity::class.java)
                toIntent.putExtra(
                    FullTextActivity.EXTRA_BEAN,
                    intent.getSerializableExtra(FullTextActivity.EXTRA_BEAN)
                )
                toIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                context.startActivity(toIntent)
            }
        }
    }

最终原因是因为:通过PendingIntent.getBroadcast 广播的形式启动Activity,这个操作已经在Android10(Q)开始不生效了。

Android10(Q)新增了后台启动 Acitvity 限制新特性:

禁止无用户交互的后台启动activity。
在后台,通过Notification也可以启动activity,但是通过alarm定时器无法启动activity。

允许Activity Starts的条件:

该应用有可见的窗口,例如有一个activity在前台
该应用程序有一个activity在foreground task
可见的应用程序绑定到应用程序的service
可见的应用程序发送该应用程序的pending intent
系统发送该应用程序的pending intent
系统发送broadcast到该应用程序
系统绑定到应用程序的服务
应用程序与配套硬件设备相关联
改应用程序是Device Policy Controller

简单来说,本次遇到的情况就是,通过Broadcast 或者Service去直接启动Activity将会导致失败。

2、解决方案

把PendingIntent.getBroadcast 换成 PendingIntent.getActivity即可。

//RemoteViewsFactory类
 override fun getViewAt(position: Int): RemoteViews? {

        val fillInIntent = Intent()
        //item点击时传递的参数
        fillInIntent.putExtra(FullTextActivity.EXTRA_BEAN, listData[position])
        rv.setOnClickFillInIntent(R.id.itemText, fillInIntent)
        return rv
}

//AppWidgetProvider类
override fun onUpdate( context: Context,  appWidgetManager: AppWidgetManager,  appWidgetIds: IntArray ) {
		val itemIntent =  Intent(context, FullTextActivity::class.java)
        val listPendingIntent = PendingIntent.getActivity(context, 0, itemIntent, PendingIntent.FLAG_UPDATE_CURRENT)
        remoteViews.setPendingIntentTemplate(R.id.list_view, listPendingIntent)
}

3、参考链接

Android-Q 对 startActivity() 做了限制,怎么适配?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/302243.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ5-03RocketMQ-Dashboard和Java客户端访问示例

接上篇02快速部署RocketMQ5.x(手动和容器部署) 已经完成 RocketMQ5.0 环境的部署,就需要对这个环境进行测试,查看集群、写入消息、读取消息等 本篇教你如何使用和查看部署的服务: Docker部署 Dashboard 获取镜像并下载部署服务 客户端连接 …

静态网页设计——旅游网(HTML+CSS+JavaScript)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: https://www.bilibili.com/video/BV1KN4y1v7jx/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术:HTMLCSSJS(…

springboot集成cas客户端

Background 单点登录SSO(Single Sign ON),指在多个应用系统中,只需登录一次,即可在多个应用系统之间共享登录。统一身份认证CAS(Central Authentication Service)是SSO的开源实现,利用CAS实现SSO可以很大程…

TrueNAS数据共享——开启SSH

目录 1、开启ssh 2、开启root登录 1、开启ssh 服务--找到SSH 启动 勾选自动启动 点击动作 2、开启root登录 勾选使用密码以root身份登录

物理机与vm文件共享与传输的设置方法

今天跟各位小伙伴,分享一下物理机与vm虚拟机文件共享与传输的设置方法,以供大家参考! 一、物理机与虚拟机文件共享设置方法 第一步:先关闭虚拟机(客户机) 第二步:选择编辑虚拟机设置 第三步&am…

01.Typora1.7.6安装以及更换主题方法

重所周知,程序员的笔记资料有多么重要,不仅是自我提升也是加强记忆 那么一定少不了Typora这个软件 今天就来感受一下它应该如何打开正确的安装的方法。 双击文件夹以后,里面会有这样两个文件 我们双击后缀为.exe的文件 更改安装位置&#…

c语言:求1-100的奇数和|练习题

一、题目 求1-100以内的奇数和 二、代码截图【带注释】 三、源代码【带注释】 #include <stdio.h> //思路分析 //1、一个除以2&#xff0c;除不尽的&#xff0c;便是奇数 //设计常量N为100&#xff0c;常量随时可以变动 #define N 100 int main() { int sum0;//设…

Zookeeper的基础介绍和安装教程

1、 Zookeeper入门 1.1 概述 Zookeeper是一个开源的分布式的&#xff0c;为分布式应用提供协调服务的Apache项目。 1.2 特点 1.3 数据结构 1.4 应用场景 提供的服务包括&#xff1a;统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。 统一…

年销5万的岚图没有爆款

作者 | 辰纹 来源 | 洞见新研社 3款车一年卖了5万台&#xff0c;这个销量不算多&#xff0c;可对于岚图来说&#xff0c;却很不容易&#xff0c;CEO卢放称这是“一场翻身仗”&#xff0c;在写给全体员工的“家信”中表达谢意&#xff0c;称是“大家的团结奋斗&#xff0c;驱动…

C++模板——(2)函数模板的声明和使用

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 勤奋&#xff0c;机会&#xff0c;&am…

【书生大模型00--开源体系介绍】

书生大模型开源体系介绍 0 通用人工智能1 InternLM性能及模型2 从模型到应用 大模型成为目前很热的关键词&#xff0c;最热门的研究方向&#xff0c;热门的应用&#xff1b;ChatGPT的横空出世所引爆&#xff0c;快速被人们上手应用到各领域&#xff1b; 0 通用人工智能 相信使…

物理机搭建hive

一、修改Hadoop配置 修改core-site.xml 配置yarn-site.xml 分发文件&#xff0c;然后重启集群 二、 Hive解压安装 上传文件 添加hive环境便量&#xff0c;source生效 启动高可用集群&#xff0c;启动hive 三、配置mysql元数据库 检查当前系统是否安装过Mysql&#xf…

Python采集微博评论做词云图

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.10 Pycharm 第三方模块使用: import requests >>> pip install requests import wordcloud >>> pip install wordclou…

软件工程造价师证书有用吗?难不难考?

&#x1f3af;软件工程造价师证书是有用的&#xff0c;它证明了持有人具备评估和估算软件开发cheng本、进度和资源规划的能力。✔️在IT行业中&#xff0c;受高度重视&#xff0c;特别是在软件开发和项目管理领域。 &#x1f469;软件工程造价师考试难易程度因人而异。该证书需…

Java技术专题:「入门到精通系列」深入探索常用的六种加密技术和实现

文章目录 1. 引言2. 对称加密3. 非对称加密4. 哈希算法5. 消息摘要6. 数字签名7. 数字证书8. 拓展功能与未来展望 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&am…

【Python学习】Python学习5-条件语句

目录 【Python学习】Python学习5-条件语句 前言if语句if语句判断条件简单的语句组参考 文章所属专区 Python学习 前言 本章节主要说明Python的条件语句&#xff0c;Python条件语句是通过一条或多条语句的执行结果&#xff08;True或者False&#xff09;来决定执行的代码块。 …

这些专利知识你知道吗?

专利作为一种重要的知识产权保护形式。专利不仅成为了企业核心竞争力的重要组成部分&#xff0c;也成为了国家创新发展的重要支撑。 专利是指国家专利主管机关授予发明创造申请人的一种专有权&#xff0c;这种专有权具有独占性、排他性和法律强制性&#xff0c;能够为持有者带来…

Rough.js:创建手绘、草图外观的图形

Rough.js 是一个小型的(<9kB gzipped)图形库&#xff0c;它可以让你以草图、手绘风格进行绘制。 该库定义了绘制直线、曲线、圆弧、多边形、圆和椭圆的基元。它还支持绘制 SVG 路径。 Rough.js 可以同时处理 Canvas 和 SVG。 安装 从npm安装&#xff1a; npm install --s…

Linux文件系统和日志分析

一、inode表结构 1. inode表 inode号在同一个设备上是唯一的。 inode号是有限资源&#xff0c;它的大小和磁盘大小有关。 访问文件的基本流程 根据文件夹的文件名和inode号的关系找到对应的inode表&#xff0c;再根据inode表&#xff08;属主 属组&#xff09;当中的指针找到磁…

基于SSM的校内信息服务发布系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…