PendingIntent兼容安卓12 的一个问题

这是我第一次遇到这个问题,反正我也是第一次做完整的安卓app,很多个第一次。

我之前做的那个老旧手机做桌面摆件的app,因为原来的“无干预”版本无法使用,所以又用回了“和风版”,但这个版本很久没用了,有些东西其实很旧就停了,所以重新搞搞,之前这个app在安卓11和鸿蒙上都可以了。但今天用安卓12的模拟器或鸿蒙启动后(可以启动),却无法进入主界面,直接FC。并出现下面出错信息:

E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.example.thirdversionclock, PID: 14346

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.thirdversionclock/com.example.thirdversionclock.FullscreenActivity_desktop}: java.lang.IllegalArgumentException: com.example.thirdversionclock: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.

Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.

看样子是PendingIntent参数的问题,于是在网上搜了一下,发现也是有很多人遇到这个问题,解决的方法大致有如下三种(我是每一种都试了,都没好使)

1、修改androidmanisfestj.xml每个activity和service的exported="false"改为“true”

2、修改pendingIntent参数

PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);

修改为:

PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);

把最后一个参数的0改为PendingIntent.FLAG_IMMUTABLE)或PendingIntent.FLAG_MUTABLE)

3、在build.gradle中添加依赖:

implementation 'androidx.work:work-runtime:2.7.1'

但是它最小使用版本是26,但我的app适配最低版本是17,即使改成了26,也可是只可启动,无法进入主页面。

没再看到其他的方法,但也没解决我的问题,最后我想那我就是兼容安卓12呗,于是我就把目标sdk版本的31改成了30.

然后我的app就可以完全正常的在安卓12的模拟器和鸿蒙手机上正常运行了,其他什么都没改。真是见了鬼!难道是我对这个“compileSdkVersion”和“targetSdkVersion ”有什么误解?目标版本和编译版本都是安卓11,但app在安卓12上可以正常运行,如果目标版本和编译版本都是安卓12反而不能正常运行?

那所谓的向下兼容是不是就是你最高版本没超过我,但我可以让你运行,如果允许版本超过我,代码就必须按照我的来,否则就不运行,还是有点迷迷糊糊。反正能用就行,我要求也不高,以后遇到类似的事也大致有个方向,应该我这个情况不是个案吧?如有大神可指点一二。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kim5659

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值