华为荣耀6Plus PE-TL10之坑你没商量

在华为手机上遇到Notification点击无法启动Activity的问题,通过逐步排查发现是由于特定包名导致的问题,调整包名后问题得以解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:在重构代码的时候,把升级模块单独提到了一个module里面,结果在notification点击时间响应的activity就无法启动了。

           一开始还以为在重构的时候,由于我的一些操作引起的,结果发现只有这一台手机会复现,其他的华为也没有复现,真是坑啊。

          最终发现原来是对包名有限制,我也是服了。


历史渊源:

下面的代码就是下载完成弹一个notification,用户点击的时候,安装,但是在华为手机上就是无法弹出,

                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        setDialogSuccess();

                        // 下载完毕后变换通知形式

                        mNotification = getNotificationByVersion(context, context.getString(R.string.upgrade_download_ok), context.getString(R.string.upgrade_download_ok), 100, 100, null);

                        if (mNotification != null && mNotivicationBuilder != null && mNotificationManager != null) {
                            mNotification.icon = R.drawable.upgrade_notification_icon;
                            mNotification.flags = Notification.FLAG_AUTO_CANCEL;
                            mNotificationManager.notify(NOTIFY_ID, mNotification);
                        }

                        Intent intent = new Intent();
                        intent.setClass(context, UpdateInstallActivity.class);
                        intent.putExtra("isInstall", true);
                        intent.putExtra("apkPath", apkNowPath);
                        if (updateFlag == FORCEFLAG) {
                            intent.putExtra("isForce", updateFlag);
                            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        }
                        PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);


                        mNotification = getNotificationByVersion(context, context.getString(R.string.upgrade_download_pre_install), context.getString(R.string.upgrade_download_pre_install), 0, 0, contentIntent);

                        if (mNotification != null && mNotivicationBuilder != null && mNotificationManager != null) {
                            mNotification.icon = R.drawable.upgrade_notification_icon;
                            mNotification.flags = Notification.FLAG_AUTO_CANCEL;
                            mNotificationManager.notify(NOTIFY_ID, mNotification);
                        }
                        if (dialog != null) {
                            dialog.dismiss();
                            dialog = null;
                        }

                        if (length != 0) {
                            InstallUtil.installApk(context, apkNowPath);
                        }
                        if (updateFlag == FORCEFLAG) {
                            mReporter.postExitApp(false);
                        }
                    }
                });

发现这个问题,我首先想到的是依次来check,

1.是否是因为我的activity是一个aar中的?

2.是否是因为我的activity挪到了一个单独的module里了?

3.是不是因为我从继承FragmentActivity改到了继承Activity

4.是不是因为编译的时候,把我在AndroidManifest中的声明搞没了,

5.会不会是因为第一次弹出了安装框,我点了取消的原因。

列好了这几个可能的原因之后,挨个尝试排查,经过接近一天的时间,排查之后,发现竟然都不是,


我想会不会是我放的路径有问题,我尝试换成其他的activity,工作正常。

尝试将这个activity挪到其他的包下,正常工作。


这时我想是不是包名的问题。

于是在原来的包下,新建了一个文件夹activity,然后将这个类移动进去,就运行ok了,多么奇葩的原因啊

com.abs.common.upgrade   改为    
com.abs.common.upgrade.activity

虽然最终华为这款手机上为什么会有这个问题,我没办法确定具体原因。

经过分析可能下面的原因

我的module包名就叫:

com.abs.common.upgrade
所以可能相同包名下的activity在华为这款手机的Notification处理的时候,有一些限制,
也有可能是module下面实际上有一个自己的包名,虽然我一直觉得这个包名没什么意义,但是不知道会不会是他的影响。

进度更新:
今天又check了一下这个问题,发现复现路径应该是下面的。
应用安装->出现notification->触发 -> 可以正常弹框 ->卸载应用-> 安装 -> 再次出现notification -> 就无法触发启动activity了,
重启应用 -> 之后就恢复正常了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值