7

我想构建一个在锁屏上可见并且可以接收触摸事件的对话框。我建立了一个窗口,WindowManager但只有TYPE_SYSTEM_OVERLAY标志显示在 GB(Android 2.3.7)的锁屏上。

有没有办法创建在锁屏上可见并且可以在 Android 2.3.7 中接收触摸事件的系统覆盖?

有一个错误,FLAG_WATCH_OUTSIDE_TOUCH但我不确定这对我有什么影响。有任何想法吗?

4

3 回答 3

3

我不认为您可以在每次锁定设备时启动一项活动,而无需以编程方式将您的应用程序绑定为管理员特权应用程序。

一旦您的应用程序成为管理员特权应用程序,您就可以通过编程方式设置密码并锁定屏幕,然后使用Device Policy Manager以编程方式解锁它。

在该锁定屏幕之上,您可以以编程方式启动自己的活动,并且您可以通过该活动创建自己的解锁器和解锁设备,因为您可以通过 DeviceAdminReceiver获得回调。

是一个很好的示例,您只需在调用 DevicePolicyManager.lockNow() 后创建自己的活动。然后它将作为正常活动出现在锁定屏幕的顶部,加上对本机锁定屏幕的额外控制。

于 2013-07-02T12:23:10.900 回答
2

试试这个它可能对你有帮助,

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.alertdialog);

而且,Android有点矛盾。它非常开放,作为开发人员,您可以访问任何东西,并且将这些权力用于善或恶取决于您。当我说邪恶时,我并不是指恶意软件。我的意思是那些试图变得可爱并以不应该被使用的方式使用东西的应用程序,比如发布通知,要求你更多地使用该应用程序。矛盾之处在于,您实际上并不能访问所有内容,开发人员认为有一些部分非常重要,以至于应用程序无法处理它们。锁定屏幕就是其中之一。您可以随心所欲地更换您的家庭应用程序,但您永远不必担心更换锁屏失败并阻止您访问手机。

即使这是可能的,你也会有更多的问题需要处理。每个锁屏都是不同的,制造商可以并且确实对其进行自定义,因此您无法保证您的活动不会妨碍手机解锁。

要在对话之外触摸,

dialog.setCanceledOnTouchOutside(your boolean);
于 2013-07-01T08:44:45.403 回答
1

最后我也达到了。不要进行活动,因为出于安全原因,android 不会在您的活动后面显示锁定屏幕,所以为了服务。

以下是我的服务 onStartCommand 中的代码

WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

View mView = mInflater.inflate(R.layout.score, null);

WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT,
    ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0,
    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
    /* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */,
    PixelFormat.RGBA_8888);

mWindowManager.addView(mView, mLayoutParams);
于 2014-05-21T10:40:54.410 回答