【问题标题】:How to disable multitasking function on android while our app is running?如何在我们的应用程序运行时禁用 android 上的多任务处理功能?
【发布时间】:2014-10-24 13:58:06
【问题描述】:

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

【问题讨论】:

  • 能否请您显示错误所在的 LogCat 的输出?
  • 这不是很聪明,从用户体验来看,您不能禁用此功能。这是 android 的一部分(系统正在处理此功能)。您可以做的是处理应用程序中的状态。尝试从 LogCat 显示一些代码和错误。
  • 它只是说应用程序已停止。遗憾的是,这段代码不起作用 public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_APP_SWITCH) { System.exit(o);返回假; }return super.onKeyDown(keyCode, event); }

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    由于 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);
        }
    }
    

    【讨论】:

      【解决方案3】:

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

      创建一个服务并让它运行一个后台线程来捕捉这个事件。

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

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

      【讨论】:

        猜你喜欢
        • 2012-05-17
        • 2014-06-13
        • 1970-01-01
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 1970-01-01
        • 2013-03-31
        相关资源
        最近更新 更多