8

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

4

4 回答 4

12

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

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

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

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

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

于 2013-05-28T11:58:38.727 回答
5

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

超级视频客户端和浮动笔记等应用程序能够在其他活动上方显示浮动窗口。这些问题可能会为您指明正确的方向:

于 2012-10-15T14:23:00.330 回答
4

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

于 2010-11-27T11:36:26.407 回答
0

按照步骤实现您的要求

  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();
        }
    }
    
于 2019-10-31T09:36:52.170 回答