在我的搜索中,我发现Android SDK目前不支持控制HDMI端动和处理HDMI输出。尽管某些设备制造商如摩托罗拉(不知道其他制造商是否也这样做)提供了API以获得更好的控制。以下是其中两个的链接,其中双屏一个(非常接近我的要求)已被弃用。
摩托罗拉 HDMI 状态 API
摩托罗拉HDMI双屏接口
镜像是连接 HDMI 时的默认行为,但我希望我的应用程序在 HDMI 输出上运行绑定服务。这将允许手机同时执行任何其他任务,而不会干扰我在HDMI屏幕上运行的服务。
有人可以建议我该怎么做吗?或者是否有任何其他制造商提供与摩托罗拉类似的灵活性?
像这样创建一个服务类。
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" />
在你的安卓清单中。