0

에 추가 전체 화면보기를 제거 모든 활동의 최상위에 머물러 있습니다.안드로이드는 내가 그것을에서 onCreate 방법은 다음과 같은 코드를 가지고있어이 활동에 대한 인 텐트 호출 물마루 위젯이 addView

문제는 나중에 제거하는 방법을 모르겠다는 것입니다. wm.removeView(mTopView);에 호출

오류를

java.lang.IllegalArgumentException가 있습니다 :보기 내가 전화 이후 추가이보기에 대한 참조를 잃고 내가 이해에서 창 관리자

에 연결되어 있지 Intent를 사용하는 위젯에서 가져 왔습니다. 그것은 상태 머신이고, 하나의 상태는이 뷰를 추가하고 다음 상태는 그것을 제거해야합니다.

어떻게 제거 할 수 있습니까? 일부 방법으로 추가 된 모든보기를 검색 한 다음 삭제할 수 있습니까?

힌트를 보내 주시면 감사하겠습니다.

답변

3

Windows 관리자를 사용하여 경고보기를 표시하므로보기의 인스턴스를 추가로 유지해야합니다.

창을보기에 추가하는 서비스를 만듭니다. 따라서 서비스가 삭제되면 창에서보기를 제거 할 수 있습니다.

여기

public class FloatingService extends Service { 

private WindowManager windowManager; 
private View floatingView; 

WindowManager.LayoutParams params; 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flag, int startId) 
{ 
    // add window 
    showAlert(); 
    return START_STICKY; 
} 

private void showAlert() { 
    if(windowManager == null || floatingView == null) { 
     windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
     floatingView = View.inflate(getBaseContext(),R.layout.floating_layout,null); 
     // do your stuff to update the view in layout 
     params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.TYPE_PHONE, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
       PixelFormat.TRANSLUCENT); 
     params.gravity = Gravity.CENTER | Gravity.CENTER; 
     windowManager.addView(floatingView, params); 
    } 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (floatingView != null) windowManager.removeView(floatingView); 
} 
+0

가 완벽하게 일했다 .. 샘플 코드입니다, 감사합니다! – Rombus

+0

롤리팝을 사용하지 않습니다. –