2013-08-30 2 views
4

SystemUI 및 Listenering을 표시할지 궁금합니다. 창은 다른 응용 프로그램이 전체 화면으로 변경, View.OnSystemUiVisibilityChangeListener가 안드로이드 서비스에서 작동하지 않습니다.

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를 호출하기 전에 수신기를 추가 할 수 있습니다.

관련 문제