2012-11-12 5 views
4

Android 응용 프로그램 위에 항상 오버레이 창을 그릴 수 있습니까?Android (시스템 전체)에 오버레이 그리기

Android x86 포트를 사용 중이며 시스템 권한이 있습니다.

@ 편집 : 오버레이 아래의보기는 모든 이벤트를 수신해야합니다.

+0

AFAIK SDK 내에 합법적 인 방법이 없습니다. 그러나 시장에 나와있는 일부 앱에서는이를 달성 할 수있었습니다. 영원히 작동하지 않을 방법을 찾으면 올바른 보안상의 이유로 공개 API를 포함하지 않기로 결정했습니다. – FoamyGuy

+0

Android 마켓을위한 것이 아닙니다. Android 자체를 수정하고 싶습니다. – Friedrich

답변

8

그것은 할 가능성이 현재 WindowManager에서보기를 추가하는 Service를 만들어 :

public class OverlayService extends Service { 

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

     WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

     View overlay = /* create your overlay here */; 

     WindowManager.LayoutParams params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, 
      PixelFormat.TRANSLUCENT); 
     windowManager.addView(overlay , params); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

하지만 당신이 여분의 허락이 필요합니다

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 

그리고 단지에 서비스를 등록을 매니페스트 :

<service android:name=".OverlayService" ></service> 

및 st 예술 작품 :

startService(new Intent(this, OverlayService.class)); 
+0

이 솔루션은 모든 이벤트를 오버레이 아래의보기로 경로 지정합니까? 나는 이것을 질문에 추가하는 것을 잊었다. – Friedrich

+0

당신은'WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE' 플래그를 추가하기 만하면됩니다 – fiddler