美文网首页
不在最近任务栏中显示

不在最近任务栏中显示

作者: 44e46f384a16 | 来源:发表于2017-09-12 09:04 被阅读122次

    在实际开发中,我们希望某些activity或者应用程序不在多任务列表中显示,即长按Home键或者多任务button键不显示近期执行的程序,我们能够在对应应用程序的AndroidManifest.xml文件里的activity标签中加入例如以下属性:

       android:excludeFromRecents="true"    
    

    比方不须要xxxActivity显示在多任务列表中:

    [code] <activity
    android:name="xxxActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    ++ android:excludeFromRecents="true"
    android:theme="@style/AppActivityTheme" >

    方法一
    设置启动的flags

    /**

    • If set, the new activity is not kept in the list of recently launched
    • activities.
      */
      public static final int FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS = 0x00800000;
        Intent intent = new Intent(this, WaitingFallBackDialog.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        startActivity(intent);
    

    方法二
    AndroidManifest.xml中activity标签下加android:excludeFromRecents =“true”即可。

    方法三
    这个其实是方法一的延伸,以及对现状的改善。对于别人已经发布的应用,我们没有办法改变其内部行为。如果不想自己打开的应用出现在最近应用列表中的话,可以自己做一个app来启动那些应用,intent指定flag:

    intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

    在系统源码中修改

    android4.4\frameworks\base\packages\SystemUI\src\com\android\systemui\recent\RecentsActivity.java
    此函数是打开最近应用点击空闲地方跳转
    public void dismissAndGoHome() {
    if (mRecentsPanel != null) {
    Intent homeIntent = new Intent(Intent.ACTION_MAIN, null);
    homeIntent.addCategory(Intent.CATEGORY_HOME);
    homeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
    | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
    startActivityAsUser(homeIntent, new UserHandle(UserHandle.USER_CURRENT));//这里是跳转到系统最高Launch 里面

        }
    }
    

    android4.4\frameworks\base\packages\SystemUI\src\com\android\systemui\recent\RecentTasksLoader.java
    //关键代码
    // Don't load the current home activity.
    if (isCurrentHomeActivity(intent.getComponent(), homeInfo)) {//这里是屏蔽了系统最高launch 不记录在最近应用的栈中
    continue;
    }
    // 手动增加需要的包名
    if (intent.getComponent().getPackageName().equals(“要屏蔽的包名”)) {
    continue;
    }

                    // Don't load ourselves
                    if (intent.getComponent().getPackageName().equals(mContext.getPackageName())) {
                        continue;
                    }
    

    设置 android:noHistory="true"后,该Activity在statck中不留历史痕迹。默认的值是false。

    相关文章

      网友评论

          本文标题:不在最近任务栏中显示

          本文链接:https://www.haomeiwen.com/subject/vxngjxtx.html