I was wondering if to show SystemUI and Listenering. The window is created in the service
package com.example.testwindow; import android.app.Service; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.PixelFormat; import android.os.IBinder; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.WindowManager.LayoutParams; import com.android.internal.policy.PolicyManager; public class WindowManagerService extends Service { private String TAG ="WindowManagerService"; private Context mContext; private WindowManager mWindowManager; private Window mWindow; @Override public void onCreate() { super.onCreate(); Log.i(TAG, "onCreate view"); this.mWindowManager = ((WindowManager) getSystemService("window")); mContext = this; } @Override public int onStartCommand(Intent intent, int flags, int startId) { int i = super.onStartCommand(intent, flags, startId); View editWindow = LayoutInflater.from(mContext).inflate(R.layout.activity_main, null); mWindow = addWindow(editWindow, 0, 0, LayoutParams.TYPE_PHONE); int mSystemUiVisibility = mWindow.getDecorView().getSystemUiVisibility(); mWindow.getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener(){ @Override public void onSystemUiVisibilityChange(int visibility) { Log.e(TAG,"systemUI onSystemUiVisibilityChange ="+visibility); } }); Log.e(TAG, "mSystemUiVisibility ="+mSystemUiVisibility); WindowManager.LayoutParams layoutParams = mWindow.getAttributes(); layoutParams.x = 0; layoutParams.y = 0; layoutParams.width = 500; layoutParams.height = 600; layoutParams.gravity = Gravity.TOP | Gravity.LEFT; layoutParams.hasSystemUiListeners = true; layoutParams.setTitle("WindowManagerService"); mWindow.setAttributes(layoutParams); mWindowManager.updateViewLayout(mWindow.getDecorView(), layoutParams); return i; } public WindowManager.LayoutParams createLayoutParams() { Log.i(TAG , "createLayoutParams"); WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams( LayoutParams.TYPE_SYSTEM_ERROR, LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); layoutParams.softInputMode = LayoutParams.SOFT_INPUT_ADJUST_PAN; layoutParams.setTitle(getClass().getName()); return layoutParams; } public Window addWindow(View paramView, int width, int height, int type) { Log.i(TAG, "addWindow view"); WindowManager.LayoutParams layoutParams = createLayoutParams(); Window localWindow = PolicyManager.makeNewWindow(this.mContext); if (localWindow != null) { localWindow.setWindowManager(this.mWindowManager, null, null); localWindow.requestFeature(Window.FEATURE_NO_TITLE); localWindow.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); layoutParams.width = width; layoutParams.height = height; layoutParams.type = type; layoutParams.format= PixelFormat.TRANSPARENT; layoutParams.flags = (LayoutParams.FLAG_NOT_FOCUSABLE | layoutParams.flags); localWindow.setAttributes(layoutParams); localWindow.setContentView(paramView); View localView = localWindow.getDecorView(); if (localView != null) { localView.setVisibility(View.VISIBLE); this.mWindowManager.addView(localView, layoutParams); } return localWindow; } return null; } @Override public IBinder onBind(Intent intent) {
When I start the service, the other application changed to FULLSCREEN or not, I can not get the log "systemUI onSystemUiVisibilityChange ="
Can someone explain the behavior? Why can't you listen to the changes?
source share