解析android创建快捷方式会启动两个应用的问题_Android

接下来讲一种完美的方案。
因为第一个界面是欢迎界面,所以快捷方式启动的界面也是欢迎界面,刚开始就怀疑快捷方式创建的代码有问题,但不知道问题出在哪儿。猜测可能会是快捷方式的错误导致系统创建两个应用,就也是同一个应用会有两个PID,结果在控制台查看打印的LOG,不同方式启动的LOG如下:

复制代码 代码如下:

09-22 09:39:11.929: INFO/ActivityManager(61): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.xxx/.activity.InitActivity } from pid 19304
09-22 09:39:12.876: INFO/ActivityManager(61): Displayed com.android.xxx/.activity.InitActivity: +763ms

09-22 09:39:47.668: INFO/ActivityManager(61): Starting: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.xxx/.activity.InitActivity bnds=[5,392][115,510] } from pid 19304
09-22 09:39:48.737: INFO/ActivityManager(61): Displayed com.android.xxx/.activity.InitActivity: +995ms

最后发现两个PID是一致的(InitActivity是欢迎界面的Activity),可能是意外,把这两个LOG作比较会发现从列表中点击图标启动应用时是上面的LOG,通过快捷方式启动的是下面的LOG,通过比较会发现,以快捷方式启动应用时会比另外一种方式少了cat=[android.intent.category.LAUNCHER] ,于是乎在代码中加上(请参照上一篇的代码,只添加了第三行):

复制代码 代码如下:

ComponentName comp = new ComponentName(this.getPackageName(), this.getPackageName() + "." +this.getLocalClassName());    
Intent intent = new Intent(Intent.ACTION_MAIN).setComponent(comp); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent); 

再跑应用一切OK,不会启动两个应用,退出也只需要一次,太给力了!至于为什么就留给看客你了。

时间: 2024-08-17 13:04:36

解析android创建快捷方式会启动两个应用的问题_Android的相关文章

android创建快捷方式来打开应用中特定的Activity

有段时间没有记录过了. 这也是换工作以后写的第一篇吧,现在公司是在做sdk的接入,对于我来说,能接触到更多不同于以前应用的很多东西,提供自己的服务给更多的人. 虽然是只是进行迭代,但是我觉得对我也有很大的帮助. 现在sdk应设计的要求要在使用了我们sdk的游戏在安装打开以后就要创建一个快捷方式,然后这个快捷方式不是用来打开应用,是为了进行静默下载所创建的,但是我们知道android里边快捷方式是与应用绑定的,他只能打开Activity,我一开始的设想是我捕捉到快捷方式的点击事件,然后开一个ser

解析Android资源文件及他们的读取方法详解_Android

Sam在Android开发中,有两种处理资源文件的方式.其一,是将所有资源文件以及JNI程序放置于一个单独的资源包.使用到他们时,使用文件方式读取.或者直接使用C++层代码读取. 其二,则是将资源文件加入到APK内部.使用各种不同的办法去得到其内容.方法一:适合于移植较大的C++程序时使用,因为C++代码数量众多,不太可能修改为JAVA代码.所以将其与资源文件以一定方式存放,并让他们自称体系是个好办法.但这造成软件的发布必须以APK+资源包的方式发布.方法二:则比较适合代码量不是非常大,且资源数

深入解析Android系统中应用程序前后台切换的实现要点_Android

在介绍程序实现之前,我们先看下Android中Activities和Task的基础知识. 我们都知道,一个Activity 可以启动另一个Activity,即使这个Activity是定义在别一个应用程序里的,比如说,想要给用户展示一个地图的信息,现在已经有一个Activity可以做这件事情,那么现在你的Activity需要做的就是将请求信息放进一个Intent对象里,并且将这个Intent对象传递给startActivity(),那么地图就可显示出来了,但用户按下Back键之后,你的Activi

详解Android中App的启动界面Splash的编写方法_Android

一.Splash界面的作用用来展现产品的Logo 应用程序初始化的操作 检查应用程序的版本 检查当前应用程序是否合法注册 二.界面的xml定义写一个布局背景设置为产品的logo图片,再添加一个textview显示版本号. <TextView android:id="@+id/tv_splash_version" android:layout_width="wrap_content" android:layout_height="wrap_conten

全面解析Android中对EditText输入实现监听的方法_Android

在 Android design support 包中提供了一种在输入不合适字符时一直显示的提示方式来显示,现在已经开始在更多的应用上被使用了:这些 Android app 在显示他们的错误提示时采用的不同的方式常常让人感觉非常的不和谐. 即这个一直显示的错误消息是在 TextInputLayout 中的 EditText 周围的.这也是,作为一个奖励,提供了材料设计风格中,活泼的浮动标签在一个 APP 的用户体验中常常是最无聊的部分. 这里来讨论如何在你的输入表单上去创建一个通用的.可重用的组

Android中通过外部程序启动App的三种方法_Android

第一种:直接通过包名: 复制代码 代码如下: Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.joyodream.jiji");                 startActivity(LaunchIntent); 第二种:通过自定义的Action 复制代码 代码如下: Intent intent = new Intent();                 intent.setAc

解析android中的dip,dp,px,sp和屏幕密度_Android

1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. 这里要特别注意dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示.在屏幕密度为160的显示屏上,1dip=1px,有时候可能你的屏幕分辨率很大如480*800,但是屏幕密度没有正确设置比如说还是160,那么这个时候凡是使用dip的都会显示异常,基本

Android通过应用程序创建快捷方式的方法_Android

本文实例讲述了Android通过应用程序创建快捷方式的方法.分享给大家供大家参考.具体如下: Android 快捷方式是桌面最基本的组件.它用于直接启动某一应用程序的某个组件. 一般情况下,可以在Launcher的应用程序列表上,通过长按某一个应用程序的图标在左面上创建改该应用程序的快捷方式.另外,还可以通过两种方式在桌面上添加快捷方式: 一:在应用程序中创建一个Intent,然后以Broadcast的形式通知Launcher创建一个快捷方式. 二:为应用程序的组件注册某一个符合特定条件的Int

android编程实现为程序创建快捷方式的方法_Android

本文实例讲述了android编程实现为程序创建快捷方式的方法.分享给大家供大家参考,具体如下: /** * 为程序创建桌面快捷方式 */ private void addShortcut(){ Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); //快捷方式的名称 shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.st