2012-05-30 19 views
5

En mi búsqueda encontré que, el SDK de Android no proporciona soporte para controlar las actividades del puerto HDMI y manejar la salida HDMI, a partir de ahora. Aunque ciertos fabricantes de dispositivos como Motorola (no sé si alguno de ellos también lo hace) proporcionan API para un poco mejor control. A continuación se muestran los enlaces a dos de ellos, de los cuales el de doble pantalla (que se ajusta bastante bien a mis requisitos) está en desuso.Programación de salida HDMI para pantalla doble

motorola hdmi status api

motorola hdmi dual screen api

de reflejo es el comportamiento por defecto de la conexión de HDMI, pero, quiero que mi aplicación para ejecutar un servicio binded de salida HDMI. Esto permitirá que el teléfono realice otras tareas simultáneamente, sin perturbar mi servicio que se ejecuta en la pantalla HDMI.

¿Puede alguien sugerir por favor cómo puedo hacerlo? ¿O si algún otro fabricante ofrece una flexibilidad similar a la de Motorola?

Respuesta

1

Cree una clase de servicio como tal.

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

Inicie el servicio, quizás en su clase de Aplicación.

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

es probable que necesite más complejo complemento de visualización/eliminar lógica basada en DisplayManager.DisplayListener

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

Usando WindowManager.LayoutParams.TYPE_TOAST no requiere ningún permiso, sino que parece ser un truco. WindowManager.LayoutParams.TYPE_SYSTEM_ALERT podría ser más razonable, pero requieres

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

en su AndroidManifest.

+0

Buen ejemplo, ¡Gracias! – Kumar

Cuestiones relacionadas