2012-05-30 15 views
5

私の検索では、Android SDKはHDMIポートの制御やHDMI出力の処理をサポートしていないことがわかりました。モトローラのような特定のデバイスメーカ(他のデバイスもそうであるかどうかはわかりませんが)は、APIを少し上手くコントロールするために提供しています。以下は2つのリンクですが、デュアルスクリーンの1つ(私の要件はかなり近い)は推奨されていません。デュアル画面向けのHDMI出力プログラミング

motorola hdmi status api

motorola hdmi dual screen api

ミラーリングは、HDMI接続のデフォルトの動作ですが、私は私のアプリは、HDMIにバインドさサービスを実行したいです。これにより、HDMI画面で動作しているサービスを妨げることなく、電話機が他のタスクを同時に実行できるようになります。

どうすればいいですか?他のメーカーがMotorolaと同様の柔軟性を提供している場合、

答えて

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

おそらくWindowManager.LayoutParams.TYPE_TOASTを使用しDisplayManager.DisplayListener

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

に基づいてロジックを追加/削除するより複雑な表示を必要とするには許可が必要としませんが、ハックのように思えます。 WindowManager.LayoutParams.TYPE_SYSTEM_ALERTはもっと妥当かもしれませんが、あなたのAndroidManifestでは

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

があります。

+0

いい例、ありがとうございます! – Kumar