7

У меня есть приложение, которое создает некоторый фоновой персонал. Когда работает фоновый режим, отображается прогресс, показывающий, что если устройство вращается в течение этого времени, активность «перезагружается», и я хочу этого избежать.Отключить и активировать изменения ориентации в действии в Android программно

По этой причине я решил отключить ориентацию во время этого процесса. Я видел разные темы для этого вопроса, но ни один из них не имеет правильного решения, по крайней мере, в моем случае.

Решения размещены около фиксируя ориентацию деятельности, но вы должны иметь дело с тем, что реверс ориентации не возвращается, если вы используете:

getResources().getConfiguration().orientation 

Функция выше возвращает SCREEN_ORIENTATION_PORTRAIT как для портретной и REVERSE_PORTRAIT случаев (по крайней мере, в моих тестах).

Таким образом, в конце концов, я использовал значение вращения, чтобы справиться с этим, так что мой код «отключить вращение» является:

int rotation = getWindowManager().getDefaultDisplay().getRotation(); 

    switch(rotation) { 
    case Surface.ROTATION_180: 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); 
     break; 
    case Surface.ROTATION_270: 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);   
     break; 
    case Surface.ROTATION_0: 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     break; 
    case Surface.ROTATION_90: 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     break; 
    } 

И чтобы снова ориентацию:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

Это отлично работает на устройстве с Android 4.1.2, но на устройстве с Android 4.2.1 он работает не так, как ожидалось.

Я думаю, что управление поворотом в активном цикле активности должно быть распространенной проблемой, но я не смог найти подходящее решение. Может быть, я искал неправильное направление, поэтому любая помощь действительно приветствуется.

Заранее благодарен, Ivan.

+0

Это на самом деле то, что вы хотите: вызов 'Screen.lockOrientation (this)' из https://github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/delight/android/ baselib/Screen.java – caw

ответ

0

Вы можете переопределить на onConfiguratoinChanged метод, чтобы отключить изменения ориентации:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    // ignore orientation change 
    if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) { 
     super.onConfigurationChanged(newConfig); 
    } 
} 

Не забудьте включить ориентацию изменили слушателя в файле AndroidManifest.xml:

<activity android:configChanges="orientation" > 
1

Попробуйте это ..

В коде отсутствует неправильный код. Правильно, я проверил его. Используйте этот код в onConfigurationChanged, который может дать разницу, а другая вещь используется ниже кода, чтобы отключить сброс активности.

<activity 
    android:name="YourActivity" 
    android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:windowSoftInputMode="adjustPan"/> 
11

Если вы хотите, чтобы отключить изменения ориентации телефона, то вы можете использовать этот код в манифесте

<activity android:name=".class_name" 

// если вы хотите, чтобы ваш экран в портретном

android:screenOrientation="portrait" > 

// если вы хотите, чтобы вы показывали в ландшафтном режиме

android:screenOrientation="landscape" > 

и если вы хотите, чтобы ваш телефон, чтобы изменить ориентацию, но предотвратить процесс от перезагрузки, то вы можете использовать onConfigurationChanged метод в классе:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    // ignore orientation change 
    if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) { 
     super.onConfigurationChanged(newConfig); 
    } 
} 
+7

Я бы не рекомендовал этот код. Когда не пересылается вызов 'onConfigurationChanged()', я получаю «SuperNotCalledException», который приводит к сбою приложения (API 23). – TheOperator

0

просто: одну строки, чтобы добавить после активности Имени в андроиде манифест

android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale 

Это сработало для меня.

 Смежные вопросы

  • Нет связанных вопросов^_^