2017-04-02 4 views
31

हमारे पास enterPictureInPictureMode() है जो किसी गतिविधि को अपने वर्तमान स्वरूप से चित्र-चित्र-चित्र प्रस्तुत करने में स्थानांतरित करने के लिए है।हम पिक्चर-इन-पिक्चर मोड कैसे छोड़ते हैं?

गतिविधि को नष्ट करने के अलावा, हम इसे किस तरह से वापस कर सकते हैं, गतिविधि को अपने सामान्य राज्य में वापस कर रहे हैं? पर exitPictureInPictureMode(), leavePictureInPictureMode(), या janeGetMeOffThisCrazyPictureInPictureModeThing() विधि नहीं है, और दस्तावेज़ में कोई विकल्प शामिल नहीं है।

मुझे मोबाइल उपकरणों पर चित्र-इन-पिक्चर मोड के लिए एंड्रॉइड ओ के लिए एक समाधान में रूचि है, हालांकि अगर यह एंड्रॉइड टीवी के लिए भी काम करता है, तो अद्भुत!

अद्यतन 2017/04/08:

@Override 
    public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { 
    super.onPictureInPictureModeChanged(isInPictureInPictureMode); 

    if (!isInPictureInPictureMode) { 
     getApplication().startActivity(new Intent(this, getClass()) 
     .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)); 
    } 
    } 
: क्या आप चाहते हैं जब उपयोगकर्ता X बटन चित्र में चित्र मोड से बाहर निकलने के लिए क्लिक करता सामान्य मोड पर वापस जाने के लिए है, तो आप कुछ इस तरह कर सकते हैं

कुंजी बिट्स के साथ वर्तमान गतिविधि को फिर से शुरू करने के लिए startActivity() पर कॉल करना है। singleTask गतिविधि के साथ, आपको कुछ गैर-Activity संदर्भ पर कॉल करने की आवश्यकता है, जैसे Application सिंगलटन। यह onStop() या onStart() ट्रिगर करने के लिए प्रतीत नहीं होता है, लेकिन यह onNewIntent() ट्रिगर करता है (जो भी Intent के साथ आप startActivity() पर जाते हैं)।

+0

के लिए गतिविधि को बहाल मान रहे है [का उपयोग PIP के लिए एक एकल प्लेबैक गतिविधि] (https://developer.android.com/training/tv/playback/picture-in-picture.html#single_playback) अनुशंसा? – ianhanniballake

+0

@ianhanniballake: हाँ। हालांकि, मेरी चिंता का समाधान नहीं करता है। मैं सामग्री को स्विच नहीं कर रहा हूं। मैं केवल सामग्री को अपने मूल आकार में विस्तारित करना चाहता हूं, बिना किसी बाधा के बाधा डाले। उदाहरण के लिए, उपयोगकर्ता पीआईपी मोड में प्रवेश करने का फैसला करता है, यह समझता है कि वीडियो बहुत छोटा है, और इसे फिर से विस्तारित करना चाहता है। – CommonsWare

+1

हां, जैसा कि आपने उल्लेख किया है, ऐसी कोई विधियां नहीं हैं। मैंने पीआईपी में बहुत कुछ काम नहीं किया है, लेकिन आप सामान्य और पीआईपी मोड स्विच को ट्रैक करने के लिए [onPictureInPictureModeChanged] पर उपयोग कर सकते हैं (https://developer.android.com/reference/android/app/Activity.html#onPictureInPictureModeChanged (बूलियन)) आयोजन। –

उत्तर

2

Official documentation का कहना है कि पीआईपी विंडो मेनू के साथ आता है जो आपको पूर्ण स्क्रीन पर टॉगल करने देता है।

PIP विंडो 240x135 डी पी है और स्क्रीन के चारों कोनों, प्रणाली द्वारा चुना में से एक में सबसे-ऊपरी स्तर पर दिखाया गया है। उपयोगकर्ता पीआईपी मेनू ला सकता है जो उन्हें रिमोट पर होम बटन दबाकर पीआईपी विंडो पूर्ण-स्क्रीन, या पीआईपी विंडो बंद कर देता है। यदि कोई अन्य वीडियो मुख्य स्क्रीन पर खेलना शुरू कर देता है, तो पीआईपी विंडो स्वचालित रूप से बंद हो जाती है।

और जब भी उपयोगकर्ता पीआईपी मोड को टॉगल करता है तो आप यूआई तत्वों को संभालने के लिए पीआईपी परिवर्तित घटना को ओवरराइड कर सकते हैं।

link to onPictureInPictureModeChanged

@Override 
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { 
    if (isInPictureInPictureMode) { 
     // Hide the controls in picture-in-picture mode. 
     ... 
    } else { 
     // Restore the playback UI based on the playback status. 
     ... 
    } 
} 
+0

यह टीवी के लिए निर्देश प्रतीत होता है। एंड्रॉइड ओ फोन (नेक्सस 5 एक्स) पर, एक करीबी बटन है, जो गतिविधि को नष्ट कर देता है। कोई रिमोट नहीं है। खिड़की को लंबे समय से दबाकर आप इसे स्थानांतरित कर सकते हैं। गतिविधि को सामान्य मोड में बहाल करने के उपयोगकर्ता-पहुंच योग्य साधन प्रतीत नहीं होते हैं। और इनमें से कोई भी इंगित करता है कि मैं, प्रोग्रामेटिक रूप से, पीआईपी मोड छोड़ देता हूं, जो इस प्रश्न का मूल है। हालांकि धन्यवाद! – CommonsWare

2

मुझे नहीं लगता कि गतिविधि चित्र में चित्र मोड छोड़ने का फैसला कर सकते हैं।

Android O API preview doc से:

गतिविधि PIP मोड में प्रवेश रोका गया राज्य में चला जाता है, लेकिन शुरू कर दिया बनी हुई है। यदि उपयोगकर्ता पीआईपी गतिविधि को टैप करता है, तो सिस्टम उपयोगकर्ता के साथ बातचीत करने के लिए मेनू दिखाता है; पीआईपी राज्य में होने पर कोई स्पर्श घटना गतिविधि तक नहीं पहुंचती है।

गतिविधि onPictureInPictureModeChanged() द्वारा अधिसूचित की जाएगी।

+1

नोट: मैं Google पर काम करता हूं (हालांकि एंड्रॉइड में नहीं) और 'जेन गेटमेफऑफरी क्राज़ी पिक्चरइनचित्रचित्र मोडिंग()' या इसी तरह की विधि पर कोई भी कॉल नहीं मिला। – rds

+0

गतिविधि पीआईपी मोड छोड़ने में सक्षम होना चाहिए: गतिविधि को 'खत्म करें)' और एक नया उदाहरण बनाएं। यहां तक ​​कि संक्रमण के साथ, यह यूआई हिचकी के परिणामस्वरूप होने की संभावना है, जो मुझे उम्मीद है कि हमारे पास बचने के लिए एक एपीआई होगा। हालांकि धन्यवाद! – CommonsWare

+0

और मैं वास्तव में मोड बदलने के समान उदाहरणों को नष्ट/पुनर्निर्मित करने पर विचार नहीं करता हूं। – rds

7
  1. ले जाएँ वापस

    activity.moveTaskToBack(false /* nonRoot */); 
    
  2. को गतिविधि सामने

    Intent startIntent = new Intent(PipActivity.this, PipActivity.class); 
    startIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
    activity.startActivity(startIntent); 
    
+0

यह पैटर्न मल्टीविंडो के लिए उपयोग किया जाता प्रतीत होता है। उम्मीद है कि यह मदद करता है, मैं खुद को कोशिश नहीं कर सका क्योंकि मेरी सभी एमुलेटर छवियां "अवैध स्टाइल अपवाद: एंटरपिक्चरइनचित्र चित्र: डिवाइस चित्र-इन-पिक्चर मोड का समर्थन नहीं करती है" ... – rds

+0

यह दुर्भाग्यपूर्ण है! दुर्भाग्य से, मुझे 'moveTaskToBack() 'को काम करने में कठिनाई हो रही है। पीआईपी गतिविधि 'सिंगल टास्क '(डॉक्स प्रति) है। 'moveTaskToBack() 'ऐप के मूल कार्य को प्रभावित करता है, न कि पीआईपी गतिविधि का कार्य। मुझे शायद [यह हैक] करने की भी आवश्यकता होगी (http://stackoverflow.com/a/17431317/115145) भी। मैं इस पर पोकिंग रखूंगा, क्योंकि आपका दृष्टिकोण वादा करता है। धन्यवाद! – CommonsWare

+0

मैंने अभी इस समाधान की कोशिश की है, और 'onDestroy()' कहा जाता है, इसलिए यह आपके प्रश्न का उत्तर नहीं देता है। वास्तव में इसे दो बार कहा जाता है: एक बार एंटरपिक्चरइनचित्र में, एक बार जब इरादा लॉन्च किया जाता है, सिंगलटास्क और FLAG_ACTIVITY_REORDER_TO_FRONT के बावजूद। – rds

संबंधित मुद्दे