2012-06-28 32 views
5

मैं सेंसर डाटा के साथ मैन्युअल रूप से खेलने के बिना Android डिवाइस उन्मुखीकरण परिवर्तन का पता लगाने की जरूरत है का पता लगा रहा है, जबकि कुछ उन्मुखीकरण के लिए गतिविधि उन्मुखीकरण छड़ी रखने, डिवाइस अभिविन्यास

onConfigurationChange मेरी गतिविधि छड़ी बारी बारी से नहीं करने के लिए के रूप में काम नहीं करेगा।

अभिविन्यास परिवर्तन का पता लगाने के लिए सेंसर डेटा के साथ खेलना मुझे लगता है कि पहिया के आविष्कार के रूप में, एंड्रॉइड पहले से ही डिवाइस अभिविन्यास परिवर्तन का पता लगाने के लिए एल्गोरिदम के कार्यान्वयन को एम्बेड करता है। और दूसरी तरफ से अभिविन्यास परिवर्तन का पता लगाना इस तरह की एक साधारण जांच नहीं है।

public void onSensorChanged(SensorEvent event) { 
     if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER || event.values.length < 3) { 
      return; 
     } 
     //getResources().getConfiguration().orientation; 
     if (event.values[1] < 6.5 && event.values[1] > -6.5) { 
      if (orientation!=1) { 
       Log.d("Sensor", "Protrait"); 
      } 
      orientation=1; 
     } else { 
      if (orientation!=0) { 
       Log.d("Sensor", "Landscape"); 
      } 
      orientation=0; 
     } 
    } 

यह वास्तव में वास्तविक डेटा प्रोसेसिंग की आवश्यकता है जैसे शोर और अचानक शॉर्ट/रोटेशन से निस्पंदन।

तो कोई विचार है कि विरासत सेवाओं का उपयोग करके डिवाइस अभिविन्यास का पता कैसे लगाया जा सकता है? (एक बार फिर, मैं अपनी गतिविधि को कुछ अभिविन्यास पर चिपका दूंगा ताकि onConfigurationChange काम नहीं करेगा)

+0

इस जैसे आप चाहते हैं नहीं है ??? http://stackoverflow.com/questions/2795833/check-orientation-on-android-phone –

+0

नहीं, मेरे पास कोई संसाधन नहीं बदला जा सकता – deimus

उत्तर

8

अभिविन्यास-ईवेंट के लिए श्रोता है।

Check the document here.

SO question mentioning implementation of that Listener.

Code Example for the same here in this blog

मुझे आशा है कि इस मदद से आप

+0

धन्यवाद आदमी जो वास्तव में मुझे चाहिए !!! आदर करना !!! मैं नया एंड्रॉइड हूं लेकिन लगता है कि एंड्रॉइड-देवों के बारे में बहुत कुछ पता नहीं है यहां तक ​​कि स्टैक ओवरफ्लो – deimus

+0

में आप डेमस का स्वागत करते हैं, कोई भी सही नहीं है, हर किसी के पास विशेषज्ञता का अपना डोमेन है, मैंने अभी शुरू किया है कि पिछले 3- 5 दिन :) हैप्पी कोडिंग – rajpara

5

मेरे गतिविधि हमेशा पोर्ट्रेट मोड में होने के लिए निर्धारित है। इस कोड को क्रेट पर रखें।

myOrientationEventListener = new OrientationEventListener(this,SensorManager.SENSOR_DELAY_NORMAL) { 
     public void onOrientationChanged(int arg0) { 
      if (arg0>=315 || arg0<45){ 
       currentOrientation = Surface.ROTATION_90; 
      }else if (arg0>=45 && arg0<135){ 
       currentOrientation = Surface.ROTATION_180; 
      }else if (arg0>=135 && arg0<225){ 
       currentOrientation = Surface.ROTATION_270; 
      }else if (arg0>=225 && arg0<315){ 
       currentOrientation = Surface.ROTATION_0; 
      } 
     } 
    }; 
+0

इससे मुझे बहुत मदद मिली। जब गतिविधि को अभिविन्यास पर बंद कर दिया जाता है, लेकिन आपको अभी भी डिवाइस की स्थिति प्राप्त करने की आवश्यकता होती है, यह सही तरीका है :) – Tooroop

5

प्रकट में screenOrientation संपत्ति की स्थापना करके आप onConfigurationChanged से उन्मुखीकरण मूल्य प्राप्त करने के लिए अब के रूप में यह फायरिंग बंद कर देंगे में सक्षम नहीं होगा, यह SensorEventListenerPitch, roll और yaw कोण प्राप्त करने के लिए ओरिएंटेशन गणना करने के लिए लागू करने के लिए संभव है, लेकिन यह थोड़ा जटिल है और इस तरह के एक कार्य के लिए एक overkill है। सबसे अच्छा समाधान मैंने पाया है, तो निम्न कोड उन्मुखीकरण परिवर्तन पर रोटेशन मूल्य अपडेट करेगा, मान 0 रोटेशन कोण के अनुसार 4 है OrientationEventListener उपयोग करने के लिए है:

private OrientationEventListener listener; 
private int rotation; 

@Override 
protected void onCreate (Bundle savedInstanceState) 
{ 
    super.onCreate (savedInstanceState); 
    setContentView (R.layout.main); 

    listener = new OrientationEventListener (this, SensorManager.SENSOR_DELAY_NORMAL) 
    { 
     @Override 
     public void onOrientationChanged (int orientation) 
     { 
      rotation = ((orientation + 45)/90) % 4; 
     } 
    }; 

    if (myOrientationEventListener.canDetectOrientation()) listener.enable(); 
    else listener = null; // Orientation detection not supported 
} 

@Override 
protected void onDestroy() 
{ 
    super.onDestroy(); 
    if (listener != null) listener.disable(); 
}