背景:在重构代码的时候,把升级模块单独提到了一个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了,
重启应用 -> 之后就恢复正常了。