在locking屏幕上使用窗口pipe理器显示视图

我有一个浮动图标,停留在所有活动的顶部,但是当设备被locking时,它将消失,直到设备被解锁。

另一个意思是,我想在锁屏上使用windowmanager从服务中显示一个视图(FloatIcon)。

这是我的代码到目前为止。

public class FloatIcon extends Service { private WindowManager windowManager; private ImageView floatIcon; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); floatIcon = new ImageView(this); floatIcon.setImageResource(R.drawable.ic_launcher); floatIcon.setClickable(true); floatIcon.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(getBaseContext(), MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplication().startActivity(intent); } }); final WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.gravity = Gravity.TOP | Gravity.LEFT; params.x = 0; params.y = 100; windowManager.addView(floatIcon, params); } @Override public void onDestroy() { super.onDestroy(); if (floatIcon != null) windowManager.removeView(floatIcon); } } 

当我谷歌时,我无法得到一些有用的东西。

Solutions Collecting From Web of "在locking屏幕上使用窗口pipe理器显示视图"

使用WindowManager.LayoutParams.TYPE_SYSTEM_ERROR而不是WindowManager.LayoutParams.TYPE_PHONE来解决问题。 这将使视图能够听到触摸事件。 但是,您也可以使用WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,但它不会听触摸事件

虽然问题得到了解答,但有些解释是: – 使用带有FLAG_SHOW_WHEN_LOCKEDTYPE_PHONE窗口只会显示在locking屏幕上,如果该窗口是全屏幕的,请参阅android参考 ,而使用TYPE_SYSTEM_ERROR窗口types没有全屏限制,问题。

正如@milosmns所问,解决这个问题的办法可能是增加一个延迟,比如100ms左右,在你的代码中,在来电屏幕上显示一个窗口将会像魅力一样工作。