5

我知道 SO 对“我该怎么做”的问题非常不满,但这次我看不到解决方法。

我是一位经验丰富且专业的 Android 开发人员,所以我觉得问这个问题真的很愚蠢,但我刚刚安装了这个应用程序 ,它做了一些我认为不可能的事情。

也就是说,它会监听屏幕手势(在这种情况下是从屏幕边缘向内滑动),无论您在设备上的哪个位置...意思是,它会在您在启动器主屏幕上以及何时在其他应用程序...无论您在做什么,它都在聆听,当它检测到从屏幕边缘滑动时,它可以让您带出一个隐藏的设置抽屉,然后它会以透明(片段?对话框?)的形式View出现在顶部无论您在使用什么其他应用程序以及在被解雇时(通过点击返回)都会让您无论您在以前的体验中处于什么位置。

老实说,我不知道这是怎么可能的,并且真的很想朝着正确的方向轻推。[编辑]在此处输入图像描述

4

2 回答 2

4

您必须处理两件事:

  1. 在顶部显示视图。为此,您需要使用特殊权限TYPE_SYSTEM_ALERT。这是在顶部显示视图的代码:

    final WindowManager.LayoutParams param=new WindowManager.LayoutParams();
    param.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
    final View view=findViewById(R.id.view1);
    final ViewGroup parent=(ViewGroup)view.getParent();
    if(parent!=null)
      parent.removeView(view);
    param.format=PixelFormat.RGBA_8888;
    param.type=WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
    param.gravity=Gravity.TOP|Gravity.LEFT;
    param.width=view.getLayoutParams().width;
    param.height=view.getLayoutParams().height;
    final WindowManager wmgr=(WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
    wmgr.addView(view,param);
    // TODO handle overlapping title bar and/or action bar
    // TODO you must add logic to remove the view
    // TODO you must use a special permission to use this method :android.permission.SYSTEM_ALERT_WINDOW
    
  2. 保持应用程序活着。为此,您需要创建一个在前台运行的服务,这意味着它使用通知。这是一个链接

有很多应用程序具有此功能。我看到的第一个是AirCalc

于 2013-07-28T18:10:12.820 回答
3

这现在被认为是一个已插入 Android 4.0.3+ 的安全漏洞: 问题:ICS 中的 TYPE_SYSTEM_OVERLAY这被称为/被称为窃听。恕我直言,现在应该避免创建依赖于此功能的东西,因为如果在未来版本中发现其他方法,它现在将正式修补。但是,该问题确实有一个答案,可以告诉您如何在 4.0.3+ 中执行此操作。如果您确实选择走那条路,那么请注意,您执行此操作的能力可能会随着 Android 的较新版本而消失。

于 2013-07-28T17:55:13.143 回答