【问题标题】:How to make an activity window stay always on top如何使活动窗口始终位于顶部
【发布时间】:2010-11-27 11:15:48
【问题描述】:

我想创建一个始终位于其他活动之上的活动(如模式窗口或 Windows 中的任务管理器)。 我怎样才能在安卓上做到这一点?谢谢

【问题讨论】:

  • 我会尝试这样做。谢谢:)
  • 您可以在 WindowManager 类的帮助下做到这一点。

标签: android android-activity window always-on-top


【解决方案1】:

您可以在 Activity 的重写 onStop 方法中使用以下代码:

@Override
protected void onStop(){
    super.onStop();
    Intent intent = new Intent(this, ClassNameOfYourActivity.class);
    startActivity(intent);
}

美感问题:如果任何其他活动试图获得焦点,您的活动将再次弹出。所以它不是模态窗口。

而且很危险!您将无法处理 Android GUI,您将只能控制您的应用程序 GUI。例如,开关调试模式、杀死应用程序(仅通过 ADB)、达到系统设置等都是不可能的。如果您关闭 ADB 并将其与自动启动机制结合使用,那么您将陷入困境。

因此,如果您与 Play 分享,您将不会受欢迎:)

【讨论】:

  • 我使用了这个解决方法,带有一个标志和一个按钮!用于我的应用程序中的错误报告!像魅力一样工作! (你必须明智地使用它!)
  • 如果用户按下联系人或系统设置之类的东西,它就不起作用。这个 UI 将保持领先,有什么建议吗?
  • 哦,我同意这很危险,但它非常适合我的目的。我主要为我孩子的 kindles 开发,需要妈妈或爸爸授权额外时间的应用程序正是我需要的。他们可能讨厌它,但他们无法阻止我。谢谢,
  • @Opiatefuchs:如果您的代码还相关,请发布您的代码,您可能会做错事。
【解决方案2】:

根据您要执行的具体操作,您可能会对位于其他活动之上的窗口感到满意。

Super Video 客户端和Floating Notes 等应用程序能够在其他活动上方显示浮动窗口。这些问题可能会为您指明正确的方向:

【讨论】:

    【解决方案3】:

    你不能。这是在 Android 系统中定义的。

    【讨论】:

    • 好的,那么我将如何实现类似的东西?appbrain.com/app/screen-filter/com.haxor
    • 看 - 每当你打开一个活动时,它就在前台,这大约是你能得到的。您可以覆盖许多意图 (LAUNCHER) 以防止人们逃避您的活动,但从长远来看,这不会安全地工作。您可以为您的手机编译 Android 的自定义版本。或者,按照 Android 的方式进行操作并制作一个粘性通知(请参阅“高级任务杀手”以供参考) - 然后您就会有一个图标始终停留在通知区域中。
    • 谢谢,我真的不需要让活动始终保持在最前面,只是我的想法是关于如何从这里实现屏幕过滤器:appbrain.com/app/screen-filter/com.haxor。所以它可能不会做这件事的正确方法,我只需要一个关于如何实现这一点的起点。
    • @RichardLeMesurier 这很有趣,我想知道他们是如何做到的,以及它是否工作稳定。你试过 LilyPad Chat 了吗?
    • 一个问题:例如,一旦它漂浮在电影播放器​​的顶部 - 如果您触摸电影播放器​​会发生什么?它会继续显示 LilyPad 聊天窗口吗?我正在检查您提到的答案,非常有趣,但是对常规应用程序使用系统警报听起来很“骇人听闻”。我的答案现在不正确。稍后会检查和编辑。
    【解决方案4】:

    按照步骤实现您的要求

    1. 创建一个将成为顶级活动的活动
    2. 在清单中添加以下代码

      <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
      
    3. 使用以下代码获取用户的覆盖权限

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
          if (!Settings.canDrawOverlays(this)) {
              new AlertDialog.Builder(this)
                  .setTitle("Permission Request")
                  .setMessage("This app needs your permission to overlay the system apps")
                  .setPositiveButton("Open settings", new DialogInterface.OnClickListener() {
                      public void onClick(DialogInterface dialog, int which) {
                          Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
                          startActivityForResult(myIntent, 101);
                      }
                  })
                  .setNegativeButton(android.R.string.no, null)
                  .show();
          }
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 2018-05-13
      相关资源
      最近更新 更多