2012-10-26 6 views
5

का उपयोग करके रोटेशन समाप्त हो गया है, मैं एक एंड्रॉइड डिवाइस (दो रोटेशन के माध्यम से लूपिंग) को घुमाने के लिए कितना समय लगता है यह मापने के लिए एक। एपीके लिखने की कोशिश कर रहा हूं।पता करें कि setRequestedOrientation

मैं setRequestedOrientation() के लिए कॉल उपयोग कर रहा हूँ 4 पदों (PORTRAIT, LANDSCAPE, REVERSE_PORTRAIT और REVERSE_LANDSCAPE) में स्क्रीन reoriente करने के लिए।

मेरी समस्या यह है कि रोटेशन समाप्त होने पर मैं यह बताने में सक्षम नहीं हूं। मैंने कुछ समाधानों की कोशिश की है, लेकिन प्रत्येक में उनकी समस्याएं हैं।

  1. मैंने का उपयोग करने का प्रयास किया। समस्या यह है कि जब यह सेंसर से अभिविन्यास परिवर्तन होता है, और setRequestedOrientation() से नहीं होता है तो यह विधि ट्रिगर हो जाती है। setRequestedOrientation() पर मेरे पिछले कॉल के बाद काम करने के लिए के लिए FULL_SENSOR पैरामीटर के साथ मुझे वास्तव में setRequestedOrientation() पर कॉल करना होगा।
  2. मैंने स्क्रीन अभिविन्यास (डिग्री में) की जांच करने के लिए थोड़ी देर लूप जोड़कर setRequestedOrientation() "अवरुद्ध" करने की कोशिश की है। मैंने android.view.Display.getRotation() को setRequestedOrientation() से पहले बुलाया और जब तक यह बदल नहीं गया है, थोड़ी देर के साथ ब्लॉक करें। दुर्भाग्यवश, यह या तो काम नहीं करता है। यूआई को फिर से चलाने से पहले यह लौटाता है।
  3. मैं, गतिविधि के जीवन चक्र का पालन करने की कोशिश की है onCreate() फिर से बुलाया पाने के लिए के लिए, ग्रहण करने के लिए रोटेशन किया गया था इंतजार कर द्वारा। इससे पहले, जब तक मेरा काउंटर एक मूल्य तक नहीं पहुंच जाता, तब तक मैं लूपिंग कर रहा था, प्रत्येक पुनरावृत्ति में setRequestedOrientation() पर कॉल किया गया। इस परिदृश्य में, मेरा टाइम लूप एक कथन कथन बन जाता है, और मुझे लगता है कि onCreate प्रत्येक बार फ़ंक्शन को कॉल करेगा, लेकिन onCreate() कुछ पुनरावृत्तियों के बाद कॉल नहीं किया जाता है। यूआई को भी फिर से खींचा नहीं प्रतीत होता है।
  4. एक अंतिम समाधान है कि मैं ऑनलाइन पाया है (लेकिन नहीं है पूरी तरह से लागू करने के लिए सक्षम किया गया) setRequestedOrientation() के बाद waitForIdleSync() विधि सही उपयोग करने के लिए है। waitForIdleSync() इंस्ट्रुमेंटेशन क्लास का हिस्सा है, और मुझे लगता है कि यह सिर्फ मानक के लिए परीक्षण किया गया है, न कि मानक। एपीके के लिए।

किसी भी विचार का वास्तव में स्वागत किया जाएगा। हम सच में आपकी मदद की सराहना करेंगे।

उत्तर

0

आप का उपयोग कर प्रयास करना चाहिए: http://developer.android.com/reference/android/view/OrientationEventListener.html

आप सक्षम कॉल करने के लिए() को बदलने के लिए अपनी डिवाइस चल रहा है की जरूरत है पहले, और फिर आप हर रोटेशन पर सूचित किया जाए।

0

वहाँ पता करने के लिए जब setRequestedOrientation() एंड्रॉयड एपीआई के माध्यम से समाप्त हो गया कोई सीधा रास्ता नहीं है। जानने का एकमात्र तरीका यह है कि इसे कॉल करने से पहले और इसे onCreate() में कॉल करने से पहले वर्तमान अभिविन्यास को जांचना है।

अपने Activity कक्षा में कार्य करें:

long timeStamp; 

public void onCreate(Bundle savedInstanceState) { 
    if (savedInstanceState == null) { 
      timeStamp = System.currentTimeMillis();  
    } 
    else { 
      timeStamp = savedInstanceState.getLong("state_time_stamp"); 
    } 

    // For example, check how long it takes to switch from portrait to landscape. 
    // You can modify this part to check PORTRAIT, LANDSCAPE, REVERSE_PORTRAIT and REVERSE_LANDSCAPE. 
    final int orientation = getResources().getConfiguration().orientation;  
    if (orientation == Configuration.SCREEN_ORIENTATION_PORTRAIT) { 
      setRequestedOrientation(ActivityInfo.ORIENTATION_LANDSCAPE); 
      return; 
    } 

    // We will reach here only after setRequestedOrientation() is done 
    // and here's the time it took to change the orientation: 
    final long elapsedTime = System.currentTimeMillis() - timeStamp; 
} 

public void onSaveInstanceState(Bundle outState) { 
    outState.putLong("state_time_stamp", timeStamp); 
} 
संबंधित मुद्दे