यह की जरूरत नहीं है, तो मैं इसे हल कैसे किया है। मुझे पता है कि यह पहिया को फिर से शुरू कर रहा है लेकिन यह मेरी आवश्यकता को पूरा करता है और मुझे मानक एसडीके उपकरणों के साथ इसे संभालने का उचित तरीका नहीं मिला।
सबसे पहले, एक OrientationManager
वर्ग कि उन्मुखीकरण को सुनने के बनाने में परिवर्तन
public class OrientationManager extends OrientationEventListener{
private static final String TAG = OrientationManager.class.getName();
private int previousAngle;
private int previousOrientation;
private Context context;
private OrientationChangeListener orientationChangeListener;
private static OrientationManager instance;
private OrientationManager(Context context) {
super(context);
this.context = context;
}
public static OrientationManager getInstance(Context context){
if (instance == null){
instance = new OrientationManager(context);
}
return instance;
}
public int getOrientation(){
return previousOrientation;
}
public void setOrientation(int orientation){
this.previousOrientation = orientation;
}
@Override
public void onOrientationChanged(int orientation) {
if (orientation == -1)
return;
if(previousOrientation == 0){
previousOrientation = context.getResources().getConfiguration().orientation;
if (orientationChangeListener != null){
orientationChangeListener.onOrientationChanged(previousOrientation);
}
}
if (previousOrientation == Configuration.ORIENTATION_LANDSCAPE &&
((previousAngle > 10 && orientation <= 10) ||
(previousAngle < 350 && previousAngle > 270 && orientation >= 350))){
if (orientationChangeListener != null){
orientationChangeListener.onOrientationChanged(Configuration.ORIENTATION_PORTRAIT);
}
previousOrientation = Configuration.ORIENTATION_PORTRAIT;
}
if (previousOrientation == Configuration.ORIENTATION_PORTRAIT &&
((previousAngle <90 && orientation >= 90 && orientation <270) ||
(previousAngle > 280 && orientation <= 280 && orientation > 180)) ){
if (orientationChangeListener != null){
orientationChangeListener.onOrientationChanged(Configuration.ORIENTATION_LANDSCAPE);
}
previousOrientation = Configuration.ORIENTATION_LANDSCAPE;
}
previousAngle = orientation;
}
public void setOrientationChangedListener(OrientationChangeListener l){
this.orientationChangeListener = l;
}
public interface OrientationChangeListener{
public void onOrientationChanged(int newOrientation);
}
}
फिर अपनी गतिविधि में OrientationChangeListener
को लागू करने और onOrientationChanged()
ओवरराइड:
public class MyActivity extends Activity implements OrientationChangeListener{
private OrientationManager orientationManager;
@Override
public void onCreate(Bundle b){
orientationManager = OrientationManager.getInstance(this);
orientationManager.setOrientationChangedListener(this);
}
@Override
public void onOrientationChanged(int newOrientation) {
orientation = newOrientation;
if (newOrientation == Configuration.ORIENTATION_LANDSCAPE){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setLandscapeConfig();
}else{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setPortraitConfig();
}
}
तो मैं onConfigurationChanged
अब और का उपयोग नहीं करते लेकिन रखना मेनिफेस्ट में निम्न पंक्ति: एंड्रॉइड: configChanges = "ओरिएंटेशन | स्क्रीनसाइज"
अपने समाधान को कार्यान्वित करें लेकिन ऑनऑरेंटेशन पर जब मैं डिवाइस को घुमाता हूं तो कभी भी कॉल नहीं किया जाता है। कोई विचार? – Codebeat
ठीक है, गतिविधि कन्स्ट्रक्टर में orientationManager.enable() को कॉल करना होगा! – Codebeat