在解决app点击home之后无法在通过广播/悬浮框等再次进入的问题之前我们先了解一下几种APP安装的路径
1.系统APP安装路径主要分为
a./system/app/priv-app
b./system/app
2.普通APP安装路径一般为:/data/app
我们可以很明确的看到系统APP安装路径存在两个,那么这两个路径又怎样的区别呢
1./system/priv-app目录是Google在Android4.4之后提出的,目的在于将系统级APP也分成几个等级,在该目录下的APP可以申请的权限要比在/system/app目录下的app申请的权限要多,在该目录下主要安装的是一些系统核心组件和一些服务等具有较高特权的APP
2./system/app目录主要存放的是一些相对不是那么重要的app,当然这也只是相抵而言.
至此我们所需要了解的一些基础东西就简单的介绍完毕了,下面进入我们的正题
系统中其实已经有通过home键退出后5S内点击悬浮框或者其他方式重新进入的应用,例如最常见的电话,当电话接通后我们点击home一般通过状态栏我们是可以立即再次进入的,通过分析Android源码,ActivityManagerService的stopAppSwitches()方法对"android.permission.STOP_APP_SWITCHES"权限做检测,如果没有该权限则
mHandler.sendMessageDelayed(msg, APP_SWITCH_DELAY_TIME);//static final long APP_SWITCH_DELAY_TIME = 5*1000;
如果存在该权限则立即启动,至此我们找到根本的原因,即缺少"android.permission.STOP_APP_SWITCHES"权限
那么问题就很好解决了,我们在Androidmanifest.xml中申请该权限不就可以了么,其实不然,Android的权限管理是非常严格的,其将权限以 android:permissionGroup 分成几个组用 android :protectionLevel 分成几个等级,而android.permission.STOP_APP_SWITCHES权限恰好是/system/priv-app所能申请到的权限(该权限/system/app无法申请到),所以确实有需要的时候我们可以将自己的应用安装在/system/priv-app目录下,并申请android.permission.STOP_APP_SWITCHES权限来解决按下home键后5S内无法通过intent或者点击悬浮按钮的再次进入的问题.