वर्तमान YouTube ऐप्लिकेशन के लिए आप क्या कह रहे हैं नहीं करता है।
मैं वीडियो प्लेबैक के लिए अपने आवेदन में इस समस्या का एक ही तरह से निपटा गया है।
परिदृश्य के लिए उपयोगकर्ता बलों उन्मुखीकरण जब वह/वह चित्र में था, OrientationEventListener जो SensorManager
जो 0 से 360
घड़ी के बीच है से पर डिवाइस अभिविन्यास आपको सूचित करता आरंभ तो उपकरण है जो चारों ओर (orientation >= 60 && orientation <= 120) || (orientation >= 240 && orientation <= 300)
होगा लैंडस्केप ओरिएंटेशन श्रृंखला के लिए झुक जाता है, तो और इस स्थिति को एक enum या ध्वज में सहेजें और फिर यदि डिवाइस पोर्ट्रेट ओरिएंटेशन रेंज (orientation <= 40 || orientation >= 320
) पर वापस जाता है, तो enum/flag को चेक करें और setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
पर कॉल करें, ध्वज/enum रीसेट करें और फिर से उपयोगकर्ता बल अभिविन्यास तक सेंसर को अक्षम करें।
यहाँ डेमो कोड है:
private enum SensorStateChangeActions {
WATCH_FOR_LANDSCAPE_CHANGES, SWITCH_FROM_LANDSCAPE_TO_STANDARD, WATCH_FOR_POTRAIT_CHANGES, SWITCH_FROM_POTRAIT_TO_STANDARD;
}
private SensorStateChangeActions mSensorStateChanges;
public void goFullScreen() {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
mSensorStateChanges = SensorStateChangeActions.WATCH_FOR_LANDSCAPE_CHANGES;
if (null == sensorEvent)
initialiseSensor(true);
else
sensorEvent.enable();
}
public void shrinkToPotraitMode() {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
mSensorStateChanges = SensorStateChangeActions.WATCH_FOR_POTRAIT_CHANGES;
if (null == sensorEvent)
initialiseSensor(true);
else
sensorEvent.enable();
}
/**
* Initialises system sensor to detect device orientation for player changes.
* Don't enable sensor until playback starts on player
*
* @param enable if set, sensor will be enabled.
*/
private void initialiseSensor(boolean enable) {
sensorEvent = new OrientationEventListener(this,
SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int orientation) {
/*
* This logic is useful when user explicitly changes orientation using player controls, in which case orientation changes gives no callbacks.
* we use sensor angle to anticipate orientation and make changes accordingly.
*/
if (null != mSensorStateChanges
&& mSensorStateChanges == SensorStateChangeActions.WATCH_FOR_LANDSCAPE_CHANGES
&& ((orientation >= 60 && orientation <= 120) || (orientation >= 240 && orientation <= 300))) {
mSensorStateChanges = SensorStateChangeActions.SWITCH_FROM_LANDSCAPE_TO_STANDARD;
} else if (null != mSensorStateChanges
&& mSensorStateChanges == SensorStateChangeActions.SWITCH_FROM_LANDSCAPE_TO_STANDARD
&& (orientation <= 40 || orientation >= 320)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
mSensorStateChanges = null;
sensorEvent.disable();
} else if (null != mSensorStateChanges
&& mSensorStateChanges == SensorStateChangeActions.WATCH_FOR_POTRAIT_CHANGES
&& ((orientation >= 300 && orientation <= 359) || (orientation >= 0 && orientation <= 45))) {
mSensorStateChanges = SensorStateChangeActions.SWITCH_FROM_POTRAIT_TO_STANDARD;
} else if (null != mSensorStateChanges
&& mSensorStateChanges == SensorStateChangeActions.SWITCH_FROM_POTRAIT_TO_STANDARD
&& ((orientation <= 300 && orientation >= 240) || (orientation <= 130 && orientation >= 60))) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
mSensorStateChanges = null;
sensorEvent.disable();
}
}
};
if (enable)
sensorEvent.enable();
}
यह YouTube कार्यक्षमता के समान काम किया, उम्मीद है कि इस मदद करता है।
मेरा आवेदन डिफ़ॉल्ट रूप से पोर्ट्रेट मोड में है। उपयोगकर्ता बटन पर क्लिक करके या डिवाइस को टिल्ट करके लैंडस्केप मोड पर स्विच कर सकता है। लेकिन लैंडस्केप मोड पर, गतिविधि को वापस पोर्ट्रेट मोड में लाने का कोई तरीका नहीं है। यदि पोर्ट्रेट पर अभिविन्यास को मजबूर करने के लिए एक और बटन प्रदान किया जाना है, तो यह अंतिम विकल्प होगा। मैं जानना चाहता था कि परिदृश्य को मजबूर करने के बाद सेंसर मोड में सेट करना संभव है। मैंने आपके विकल्प टी को विराम पर सेंसर मोड पर सेट करने का प्रयास किया है, लेकिन जब यह पोर्ट्रेट मोड में होता है तो मैं लैंडस्केप मोड पर बल देना चाहता हूं, लेकिन यह पोर्ट्रेट मोड पर वापस आ जाएगा। – Kulai