如何在我们的应用程序运行时禁用Android上的多任务处理功能?

时间:2014-10-24 13:58:06

标签: android samsung-mobile keyevent android-homebutton samsung-galaxy

我们想知道,如果有办法阻止“长按”主页按钮功能,则会打开“appswitch / multitasking”对话框。
当我们尝试通过按住主页按钮打开三星Galaxy s3上的多任务处理时,我们的应用程序崩溃了 有没有办法解决这个bug?因此,在应用程序运行时,多任务处理对话框会打开吗? 或者,您能否提供一些禁用此“多任务处理功能”的代码?

3 个答案:

答案 0 :(得分:0)

如果您没有创建自己的Android ROM,则无法阻止Home按钮甚至无法知道Home已被按下。这是出于安全原因在Android中完成的。

你能粘贴你的代码和logcat错误吗?

答案 1 :(得分:0)

有一种未知的方法可以实现这一目标:

创建服务并使其运行后台线程以捕获此事件。

ComponentName cm = am.getRunningTasks(1).get(0).topActivity;
String packageName = cm.getPackageName();
if (cm.getClassName().equals("com.android.systemui.recent.RecentsActivity"))
{
    handler.post(new Runnable() {
        @Override
        public void run()
        {
            try
            {
                Intent closeRecents = new Intent("com.android.systemui.recent.action.TOGGLE_RECENTS");
                closeRecents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                ComponentName recents = new ComponentName("com.android.systemui", "com.android.systemui.recent.RecentsActivity");
                closeRecents.setComponent(recents);
                context.startActivity(closeRecents);
            }
            catch (Throwable e)
            {
                e.printStackTrace();
            }
        }
    });
}

基本上,这会在弹出的时候崩溃“最近的任务”。

答案 2 :(得分:0)

由于Android Lollipop ActivityManager#getRunningTasks()方法已被弃用,但仍然可以使用它来“阻止”多任务处理。 从其文档:“为了向后兼容,它仍将返回其数据的一小部分:至少是调用者自己的任务,可能还有一些其他任务,例如家庭,已知不敏感。”

因此您可以按如下方式使用调用者任务:

ComponentName cn = am.getRunningTasks(1).get(0).topActivity; //returns caller's own activity on Lollipop
if (cn != null && cn.getClassName().equals("com.example.MainActivity")) { //use fully qualified name of your running activity
        Intent intent = new Intent(context, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //get activity keeping its stack
        context.startActivity(intent);
    }
}