2012-05-30 4 views
5

내 검색에서 안드로이드 SDK는 HDMI 포트 작동을 제어하고 HDMI 출력을 처리하는 것을 지원하지 않는다는 것을 알게되었습니다. 모토로라와 같은 특정 장치 제조업체 (다른 장치도 해당하는지 여부는 알 수 없음)가 조금 더 나은 제어를 위해 API를 제공하지만. 아래는 그 중 두 개에 대한 링크입니다.이 중 듀얼 스크린 중 하나 (내 요구 사항에 매우 잘 어울리는)는 더 이상 사용되지 않습니다.듀얼 스크린을위한 HDMI 출력 프로그래밍

motorola hdmi status api

motorola hdmi dual screen api

미러링은 내가 내 애플 HDMI에 바인더 제본 서비스를 실행하려면, HDMI 연결에 대한 기본 동작입니다 만. 이렇게하면 HDMI 화면에서 실행중인 서비스를 방해하지 않고 휴대 전화가 다른 작업을 동시에 수행 할 수 있습니다.

누군가가 어떻게 해결할 수 있는지 제안 해 주시겠습니까? 아니면 다른 제조업체가 Motorola와 비슷한 유연성을 제공합니까?

답변

1

이렇게 서비스 클래스를 만듭니다.

public class MultiDisplayService extends Service { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     DisplayManager dm = (DisplayManager)getApplicationContext().getSystemService(DISPLAY_SERVICE); 
     if (dm != null){ 
      Display dispArray[] = dm.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION); 

     if (dispArray.length>0){ 
      Display display = dispArray[0]; 
      Log.e(TAG,"Service using display:"+display.getName()); 
      Context displayContext = getApplicationContext().createDisplayContext(display); 
      WindowManager wm = (WindowManager)displayContext.getSystemService(WINDOW_SERVICE); 
      View view = LayoutInflater.from(displayContext).inflate(R.layout.fragment_main,null); 
      final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.TYPE_TOAST, 
        WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, 
        PixelFormat.TRANSLUCENT); 
      wm.addView(view, params); 
     } 
    } 
} 

응용 프로그램 클래스에서 서비스를 시작하십시오.

public class MultiDisplayApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     startService(new Intent(this, MultiDisplayService.class)); 
    } 
} 

당신은 아마 어떤 권한이 필요하지 않습니다하지만 해킹처럼 보인다 DisplayManager.DisplayListener

mDisplayManager = (DisplayManager) this.getSystemService(Context.DISPLAY_SERVICE); 
mDisplayManager.registerDisplayListener(this, null); 

WindowManager.LayoutParams.TYPE_TOAST 사용에 따라 제거/논리를 좀 더 복잡한 디스플레이 추가가 필요합니다. WindowManager.LayoutParams.TYPE_SYSTEM_ALERT이 더 적당 할 수 있지만 재주문이 가능할 수 있습니다.

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

AndroidManifest.

+0

좋은 예, 감사합니다. – Kumar