2012-05-30 11 views
5

के लिए एचडीएमआई आउट प्रोग्रामिंग मेरी खोज में मैंने पाया कि एंड्रॉइड एसडीके एचडीएमआई पोर्ट गतिविधियों को नियंत्रित करने और एचडीएमआई आउटपुट को संभालने के लिए कोई समर्थन नहीं प्रदान करता है। हालांकि मोटोरोला जैसे कुछ डिवाइस निर्माता (यह नहीं जानते कि कोई अन्य भी ऐसा करता है) थोड़ा बेहतर नियंत्रण के लिए एपीआई प्रदान करता है। नीचे उनमें से दो के लिंक हैं, जिनमें से दोहरी स्क्रीन एक (जो मेरी आवश्यकता को बहुत करीब रखती है) को बहिष्कृत किया गया है।दोहरी स्क्रीन

motorola hdmi status api

motorola hdmi dual screen api

मिररिंग HDMI जोड़ने पर डिफ़ॉल्ट व्यवहार है, लेकिन, मैं अपने ऐप HDMI पर एक आबद्ध सेवा बाहर चलाना चाहते हैं। यह फोन को एचडीएमआई स्क्रीन पर चल रही मेरी सेवा को परेशान करने के साथ-साथ किसी अन्य कार्य को करने की अनुमति देगा।

क्या कोई सुझाव दे सकता है कि मैं इसके बारे में कैसे जा सकता हूं? या यदि कोई अन्य निर्माता मोटोरोला के समान लचीलापन प्रदान करता है?

उत्तर

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 अधिक उचित हो सकता है, लेकिन अपने AndroidManifest में

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

requieres।

+0

अच्छा उदाहरण, धन्यवाद !! – Kumar