是时候适配android14了

news/2024/10/23 7:33:18/

1、原来老项目中有用到前台Service的功能的app,需要在14当中制定服务类型,类型分类如下所示:

为了帮助开发者更有目的地定义面向用户的前台服务,Android 10 在 <service> 元素内引入了 android:foregroundServiceType 属性。如果您的应用以 Android 14 为目标平台,则必须指定适当的前台服务类型。与以前的 Android 版本一样,可组合使用多个类型。下面列出了可供选择的前台服务类型:camera
connectedDevice
dataSync
health
location
mediaPlayback
mediaProjection
microphone
phoneCall
remoteMessaging
shortService
specialUse
systemExempted

使用方式如下:

<manifest ...><uses-permission android:name="android.permission.FOREGROUND_SERVICE" /><uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" /><application ...><serviceandroid:name=".MyMediaPlaybackService"android:foregroundServiceType="mediaPlayback"android:exported="false"></service></application>
</manifest>

如果以 Android 14 为目标平台的应用未在清单中定义给定服务的类型,系统会在调用 startForeground() 时引发 MissingForegroundServiceTypeException

2、原来老项目存在隐士启动Activity的方式时,在android14上必须更改该activityexpored属性为true,否则系统会抛出异常,隐式调用清单文件配置如下:

<activityandroid:name=".AppActivity"android:exported="true"><intent-filter><action android:name="com.example.action.APP_ACTION" /><category android:name="android.intent.category.DEFAULT" /></intent-filter>
</activity>

3、在android14上,声明动态广播时必须指定expored属性,代码如下:

val filter = IntentFilter(APP_SPECIFIC_BROADCAST)
val listenToBroadcastsFromOtherApps = false
val receiverFlags = if (listenToBroadcastsFromOtherApps) {ContextCompat.RECEIVER_EXPORTED
} else {ContextCompat.RECEIVER_NOT_EXPORTED
}
ContextCompat.registerReceiver(context, br, filter, receiverFlags)

4、从后台启动活动的附加限制

  • 现在,当应用使用 PendingIntent#send() 或类似方法发送 PendingIntent 时,如果它想要授予自己的后台 activity 启动待处理 intent 的启动特权,则必须选择启用。如需选择启用,应用应通过 setPendingIntentBackgroundActivityStartMode(MODE_BACKGROUND_ACTIVITY_START_ALLOWED) 传递 ActivityOptions 软件包。
  • 当可见应用使用 bindService() 方法绑定其他在后台应用的服务时,如果可见应用想要授予自己的后台 activity 对绑定服务的启动特权,则必须选择启用。如需选择启用,应用应在调用 bindService() 方法时包含 BIND_ALLOW_ACTIVITY_STARTS 标志。

5、非SDK限制进一步更新

请参阅官网sdk接口,及时过滤掉不安全的反射调用

6、最低安装api的级别,如果项目目标编译过老请尽快修改

从 Android 14 开始,targetSdkVersion 低于 23 的应用无法安装。要求应用满足这些最低目标 API 级别要求有助于提高用户的安全性和隐私性。

7、以前老项目不可关闭通知,在android14上是允许用户关闭的

如果您的应用向用户显示不可关闭的前台通知,请注意:Android 14 已更改此行为,允许用户关闭此类通知。

这项变更适用于通过 Notification.Builder#setOngoing(true) 或 NotificationCompat.Builder#setOngoing(true) 设置 Notification.FLAG_ONGOING_EVENT 来阻止用户关闭前台通知的应用。FLAG_ONGOING_EVENT 的行为已发生变化,使用户实际上能够关闭此类通知。

8、在调用killBackgroundProcesses时应用只能关闭后台进程

从 Android 14 开始,当您的应用调用 killBackgroundProcesses() 时,该 API 只能终止您自己应用的后台进程。

如果您传入另一个应用的软件包名称,此方法对该应用的后台进程没有影响,并且 Logcat 中会显示以下消息:

Invalid packageName: com.example.anotherapp

您的应用不应使用 killBackgroundProcesses() API,也不得以其他方式尝试影响其他应用的进程生命周期,即使在旧版操作系统上也是如此。Android 旨在让缓存应用在后台运行,并在系统需要内存时自动终止它们。如果您的应用会不必要地终止其他应用,则由于之后需要完全重启这些应用,因此可能会降低系统性能并增加耗电量,这比恢复现有缓存应用所消耗的资源要多得多。


http://www.ppmy.cn/news/498805.html

相关文章

电脑嘟一声,然后卡顿的解决办法

网上关于此类的解释大都是硬盘坏了&#xff0c;但用硬盘监测工具&#xff0c;譬如CrystalDiskInfo.exe看到硬盘的状态都是没有问题。 后来找到真正的原因是电源选项设置问题&#xff0c;之前是1分钟关闭硬盘&#xff0c;改成永远不关闭即可。

解决电脑卡顿问题

1.解决电脑卡顿问题 a.检查 b.修复 c.重启 2.查看电脑是否正版 a.输入命令 b.显示信息

电脑系统卡顿,怎么解决

最近感觉系统卡卡的 别抓心挠肝的了 今天小编教你如何应对 No.1 设置任务管理器 1.按住CtrlShiftESC&#xff0c;打开任务管理器。查看占用CPU、内存、磁盘、比例较高的程序结束进程。&#xff08;有时软件异常导致CPU使用率较高就可以选择禁用它&#xff09; 2.选择启动…

电脑卡慢原因之磁盘占用100%

电脑刚重装完系统没多久就变得卡慢了&#xff0c;前几天一直凑合着用着&#xff0c;今天实在受不了了&#xff0c;点一下鼠标反应好长时间&#xff0c;还让不让人好好玩耍了。今天就花了一些时间彻底解决一下这个问题。 遇到这种情况&#xff0c;我首先查看了一下资源管理器&am…

电脑卡怎么办,简单步骤让电脑变快

随着时代的发展&#xff0c;电脑成了生活中必不可少的部分。但是&#xff0c;当你的电脑变慢了&#xff0c;怎么办呢&#xff1f;直接重新安装系统吗&#xff1f;那可能不是明智的选择&#xff01;电脑用的时间越长就越卡&#xff0c;这是很正常的现象&#xff0c;基本上是每个…

计算机搜索功能卡,电脑卡

本词条缺少概述图&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来编辑吧&#xff01; 电脑使用过程中由内存&#xff0c;运行&#xff0c;硬件等原因造成的电脑反映缓慢现象。 中文名 电脑卡 类 型 硬件领 域 计算机 性 质 名词 电脑…

解决电脑卡顿的一系列操作

本篇从别处回答复制的&#xff0c;主要用作自己的备忘。&#xff08;不一定全部都要修改&#xff0c;我改完一项虚拟内存后就不怎么卡了&#xff09; 而且尝试完之后电脑的确不怎么卡了。 copy from :http://ask.zol.com.cn/x/1174226.html 一、清理磁盘和整理磁盘碎片。 1、在…

拷贝目录到另外一台服务器,并且保持原属性不变

rsync -avz /app/console/ root192.168.1.167:/app/ mv tool app acquirer cstc/ useradd -u 530 -g 530 -d /app/cstc cstc chown cstc:cstc /app/cstc cp -a /etc/skel/. /app/cstc chown -R cstc:cstc /app/cstc 你可以使用cp命令&#xff08;copy&#xff09;来复制文件。…