android 两个启动入口 打开了 两个应用程序的实例的解决办法。

首先,你可以尝试在给intent设置一些属性。

intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

如果这样还不行,可以继续往下读。


在我的应用中,会有一个按钮,用户可以通过点击按钮来启动网易新闻。因为不知道网易新闻的具体的主Activity名,首先想到的就是使用通过使用包名来启动网易新闻。得到网易新闻包名的方式很简单,使用android的ddms工具就可以查看到。包名是:"com.netease.newsreader.activity"。

第一次写的按钮的点击事件为:

Intent startapp = mContext.getPackageManager().getLaunchIntentForPackage("com.netease.newsreader.activity");
startapp.addCategory(Intent.ACTION_MAIN);
startapp.addCategory(Intent.CATEGORY_LAUNCHER);
startapp.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
mContext.startActivity(startapp);


以为这样就轻松搞定了。后来测试发现,点击我这个按钮进入的网易新闻和点击网易新闻自带的快捷方式进入的网易新闻不是同一个。很纳闷,一直都找不到原因,后来都开始怀疑是网易

新闻自身的原因了。最后,一次偶然的尝试,让我找到了该问题的解决方案。

Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intent.setComponent(ComponentName.unflattenFromString("com.netease.newsreader.activity/.MainIndexActivity"));
mContext.startActivity(intent);

相信大家也发现不一样的地方了。对了,就是不通过包名来启动,而是通过网易新闻的主activity来启动,就可以解决这个问题。

至于如何知道应用的主Activity,方法有很多,可以通过log过滤ActivityManager来看,也可以通过反编译来看。

以上只是个人的一点小方法,如有更好的方法,请大家一定要告知,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值