2012-05-30 76 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