2013-08-30 20 views
4

我想知道是否顯示SystemUI和Listenering。在服務View.OnSystemUiVisibilityChangeListener不工作在Android服務

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) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     if (mWindow != null) { 
      mWindowManager.removeView(mWindow.getDecorView()); 
      mWindow = null; 
     } 
     super.onDestroy(); 
    } 
} 

當我啓動服務,創建窗口,其他應用程序改變爲全屏或不,我不能讓日誌「systemUI onSystemUiVisibilityChange =」

有人能解釋的行爲?爲什麼不能聽取變化?

+0

這可能有助於http://stackoverflow.com/questions/18551135/receiving-hidden-status-bar-entering-a-full-screen-activity-event-on-a-service/19201933#19201933 –

回答

1

您可以嘗試在調用addView之前添加偵聽器。