2012-05-30 9 views
5

Nella mia ricerca ho rilevato che, l'SDK Android non fornisce supporto per il controllo delle attività della porta HDMI e la gestione dell'uscita HDMI, a partire da ora. Sebbene alcuni produttori di dispositivi come Motorola (non so se ne facciano altri) forniscono API per un controllo un po 'migliore. Di seguito sono riportati i link a due di questi, di cui il doppio schermo (che si adatta abbastanza bene alle mie esigenze) è deprecato.Programmazione uscita HDMI per doppio schermo

motorola hdmi status api

motorola hdmi dual screen api

Mirroring è il comportamento di default sul collegamento HDMI, ma, voglio che la mia applicazione per eseguire un servizio di rilegata in HDMI out. Ciò consentirà al telefono di svolgere altre attività contemporaneamente, senza disturbare il servizio in esecuzione sullo schermo HDMI.

Qualcuno può suggerire per favore come posso fare a riguardo? O se qualche altro produttore offre una flessibilità simile a quella di Motorola?

risposta

1

Creare una classe di servizio in questo modo.

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

Avviare il servizio, forse nella classe Application.

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

si avrà probabilmente bisogno di più complesso di visualizzazione Add/Remove logica basata su DisplayManager.DisplayListener

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

Utilizzando WindowManager.LayoutParams.TYPE_TOAST non richiede autorizzazioni, ma sembra un hack. WindowManager.LayoutParams.TYPE_SYSTEM_ALERT potrebbe essere più ragionevole, ma requieres

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

nel vostro AndroidManifest.

+0

Bel esempio, grazie !! – Kumar

Problemi correlati