Вопрос по android – Программирование выхода HDMI для двойного экрана

5

В моем поиске я обнаружил, что на данный момент Android SDK не поддерживает управление активностью порта HDMI и обработку вывода HDMI. Хотя некоторые производители устройств, такие как Motorola (не знают, делают ли это и другие), предоставляют API-интерфейсы для немного лучшего контроля. Ниже приведены ссылки на две из них, из которых двойной экран (который удовлетворяет моим требованиям довольно близко) устарел.

Motorola HDMI-статус API

Motorola HDMI HDMI двойной экран API

Зеркальное отображение - это стандартное поведение при подключении HDMI, но я хочу, чтобы мое приложение запускало привязанный сервис по HDMI out. Это позволит телефону одновременно выполнять любые другие задачи, не мешая работе моей службы на экране HDMI.

Может кто-нибудь подсказать, пожалуйста, как мне это сделать? Или если какой-либо другой производитель обеспечивает такую же гибкость, как Motorola?

Ваш Ответ

1   ответ
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.

Хороший пример, спасибо!

Похожие вопросы