2012-05-30 107 views
5

在我的搜索中,我發現,Android SDK不支持控制HDMI端口活動和處理HDMI輸出,截至目前。儘管摩托羅拉等某些設備製造商(不知道其他公司是否也這樣做)提供了一些更好的控制API。以下是其中兩個的鏈接,其中雙屏幕(其適合我的要求非常接近)已被棄用。HDMI輸出編程爲雙屏幕

motorola hdmi status api

motorola hdmi dual screen api

鏡像是在連接HDMI的默認行爲,但是,我想我的應用程序運行在一個HDMI綁定服務的。這將允許手機同時執行任何其他任務,而不會干擾我在HDMI屏幕上運行的服務。

有人可以請建議我該怎麼辦?或者如果其他製造商提供與摩托羅拉類似的靈活性

回答

1

像這樣創建一個Service類。

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); 
     } 
    } 
} 

啓動服務,也許在您的Application類中。

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可能更合理,但是在您的AndroidManifest中需要

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

+0

不錯的例子,謝謝! – Kumar