-1

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

4

3 回答 3

0

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

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

于 2014-10-24T14:05:35.377 回答
0

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

创建一个 Service 并让它运行一个后台线程来捕获这个事件。

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();
            }
        }
    });
}

基本上,这会在弹出时折叠“最近的任务”。

于 2014-10-24T14:41:32.160 回答
0

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

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

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);
    }
}
于 2016-09-05T07:27:01.647 回答