频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
android 两个启动入口 打开了 两个应用程序的实例的解决办法
2012-07-16 11:01:32           
收藏   我要投稿

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


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

如果这样还不行,可以继续往下读。www.2cto.com


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

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


[java] 
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); 

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

[java]
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来看,也可以通过反编译来看。
作者:g475266696

点击复制链接 与好友分享!回本站首页
上一篇:Android构建音频播放器教程(一)
下一篇:Android sd卡使用解说
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站